Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
doc:dev_windows [11/07/2019 19:31]
scorpio810 [Compiler QET under Windows with MinGW]
doc:dev_windows [11/07/2019 19:48] (Version actuelle)
scorpio810 [Compiler QET under Windows with MinGW]
Ligne 1: Ligne 1:
 +====== Développement sous Windows ======
  
 +Cette page regroupe quelques astuces pour le développement de QET sous Windows.
 +
 +===== Utilitaires =====
 +  * Subversion en ligne de commande (svn.exe) est fourni par [[http://​www.open.collab.net/​downloads/​subversion/​|CollabNet]] ; attention, il faut être inscrit pour bénéficier des téléchargements.
 +  * [[http://​tortoisesvn.net/​downloads|TortoiseSVN]] est un front-end graphique pour Subversion ​ * 
 +  * [[http://​download.qt-project.org/​official_releases/​qt/​4.8/​4.8.6/​qt-opensource-windows-x86-mingw482-4.8.6-1.exe|Qt OpenSource pour Windows]] (choisissez la version "minGW 4.82"​) ​  Qt libraries 4.8.6 for Windows. ​
 +  * gdb.exe est fourni par [[http://​www.mingw.org/​old/​download.shtml#​hdr2|MingW]] : http://​sourceforge.net/​project/​showfiles.php?​group_id=2435
 +  * [[http://​sourceforge.net/​projects/​mingw/​files/​Installer/​mingw-get-inst/​mingw-get-inst-20120426/​mingw-get-inst-20120426.exe/​download|MinGW]] A native Windows port of the GNU Compiler Collection (GCC)
 +
 +
 +===== Compiler QET en mode debug =====
 +Pour pouvoir lancer ''​make debug''​ sous Windows, il faut diposer de Qt en version debug ; pour cela, se rendre dans Démarrer > Programmes > Qt 4.4.0 > Qt 4.4.0 (Build Debug Libraries).
 +
 +
 +
 +===== Avoir une sortie dans la console =====
 +  * Éditer le fichier qelectrotech.pro,​ ajouter ''​console''​ à la ligne CONFIG +=
 +  * Si, lors de l'​édition des liens (dernière étape de la compilation),​ vous obtenez l'​erreur suivante : <​code>​
 +g++ -enable-stdcall-fixup -Wl,​-enable-auto-import -Wl,​-enable-runtime-pseudo-reloc -Wl,-s -Wl,​-subsystem,​console -mthrea
 +ds -Wl -o release\qelectrotech.exe object_script.qelectrotech.Release ​ -L"​c:​\Qt\4.4.0\lib"​ release\qelectrotech_res.o -l
 +QtSvg4 -lQtXml4 -lQtGui4 -lQtNetwork4 -lQtCore4
 +/​mingw/​lib/​libmingw32.a(main.o)(.text+0x106):​main.c:​ undefined reference to `WinMain@16'​
 +collect2: ld returned 1 exit status
 +mingw32-make[1]:​ *** [release\qelectrotech.exe] Error 1
 +mingw32-make[1]:​ Leaving directory `C:/​cpp/​qet-0.2'​
 +mingw32-make:​ *** [release] Error 2
 +</​code>​ Supprimez le fichier main.o dans le répertoire release\ ou debug\.
 +
 +===== Créer un paquet "ready to use" de QElectroTech =====
 +Exemple ici avec le trunk.
 +Pré-requis : MingW (pour ''​mingw32-make.exe''​),​ Subversion (pour ''​svn.exe''​),​ utilitaires Qt (pour ''​qmake.exe''​ et bien d'​autres),​ le tout **accessible dans le PATH**. À cela s'​ajoute Cygwin (pour ''​bash.exe''​),​ et 7-Zip (pour 7z.exe) sans contrainte particulière au niveau du PATH.
 +Exemple de PATH utilisable : <​file>​C:​\putty;​C:​\MinGW\bin;​C:​\Qt\4.5.3\bin;​C:​\WINDOWS\system32;​C:​\WINDOWS;​C:​\WINDOWS\System32\Wbem;​C:​\Program Files\Subversion\;​C:​\Program Files\TortoiseSVN\bin;</​file>​
 +
 +==== Mise en place du répertoire de travail ====
 +Lancer une invite de commande : Windows+R => cmd
 +Se rendre dans un répertoire qui sera dédié au packaging ; veiller à ce qu'il n'y ait pas d'​espace dans le chemin de ce dossier ; exemple : <code dos>cd /d D:​\qet_packaging\</​code>​
 +Y créer un répertoire bin : <code dos>​mkdir bin</​code>​
 +Faire un check out du répertoire trunk du dépôt Subversion : <​code>​svn checkout svn://​svn.tuxfamily.org/​svnroot/​qet/​qet/​trunk qelectrotech_trunk</​code>​
 +
 +Ou pour ne pas charger le .svn  du dépôt Subversion.
 +
 +<​code>​svn export svn://​svn.tuxfamily.org/​svnroot/​qet/​qet/​trunk qelectrotech_trunk</​code>​
 +
 +__On lance la compilation__
 +
 +<​code>​qmake
 +mingw32-make -f Makefile.Release</​code>​
 +
 +ou avec un processeur tres puissant (8 cores)
 +<​code>​mingw32-make -j9 -f Makefile.Release</​code>​
 +
 +
 +copier le binaire qelectrotech.exe du répertoire release dans le répertoire bin
 +
 +Ajouter les dll dans le répertoire bin:
 + 
 +''​__on ajoute les dll de MinGW C:​\MinGW\bin__''​
 +<​code>​mingwm10.dll </​code>​
 + 
 +''​__on ajoute les dll de Qt C:​\Qt\4.8.5\bin__''​
 +<​code>​QtCore4.dll ​ QtGui4.dll ​ QtNetwork4.dll ​ QtSql4.dll ​ QtSvg4.dll ​ QtXml4.dll libgcc_s_dw2-1.dll ​ libstdc++-6.dll</​code>​
 + 
 +''​__on ajoute un répertoire imageformats avec dedans__''​
 +
 +C:​\Qt\4.8.5\plugins\imageformats
 +   
 +<​code>​qjpeg4.dll </​code>​
 +
 +''​__on ajoute un répertoire sqldrivers avec dedans la dll__''​
 +
 +C:​\Qt\4.8.5\plugins\sqldrivers
 +
 +
 +<​code>​qsqlite4.dll</​code>​
 +
 +-----------------------------------------
 +
 +
 +
 +
 +=== Exemple de l'​architecture d'une ReadyToUse avec la commande tree ===
 +
 +*Le répertoire éléments n'​étant pas reprensenté pour des question de taille évidente.
 +
 +<​code>​qelectrotech-0.3b-x86-win32-readytouse$ tree</​code>​
 +
 +
 +<​code>​
 +.                                                                                                                                                                                  ​
 +├── bin                                                                                                                                                                            ​
 +│   ├── imageformats ​                                                                                                                                                              
 +│   │   └── qjpeg4.dll ​                                                                                                                                                            
 +│   ├── libgcc_s_dw2-1.dll ​                                                                                                                                                        
 +│   ├── mingwm10.dll ​                                                                                                                                                              
 +│   ├── qelectrotech.exe ​                                                                                                                                                          
 +│   ├── QtCore4.dll ​                                                                                                                                                               ​
 +│   ├── QtGui4.dll ​                                                                                                                                                                
 +│   ├── QtNetwork4.dll ​                                                                                                                                                            
 +│   ├── QtSql4.dll ​                                                                                                                                                                
 +│   ├── QtSvg4.dll ​                                                                                                                                                                
 +│   ├── QtXml4.dll ​                                                                                                                                                                
 +│   └── sqldrivers ​                                                                                                                                                                
 +│   ​    ​└── qsqlite4.dll ​                                                                                                                                                          
 +├── ChangeLog ​                                                                                                                                                                     ​
 +├── conf                                                                                                                                                                           
 +│   ├── elements ​                                                                                                                                                                  
 +│   ├── qelectrotech.conf ​                                                                                                                                                         ​
 +│   └── titleblocks ​                                                                                                                                                               ​
 +├── CREDIT ​                                                                                                                                                                        
 +├── elements ​                                                                                                                                                                      
 +│   ├── appareils_de_mesure ​                                                                                                                                                       ​
 +│   ├── automatisme ​                                                                                                                                                               ​
 +│   ├── blocs_de_securite ​                                                                                                                                                         ​
 +│   ├── bornes ​                                                                                                                                                                    
 +│   ├── capteurs ​                                                                                                                                                                  
 +│   ├── contacts ​                                                                                                                                                                  
 +│   ├── convertisseurs ​                                                                                                                                                            
 +│   ├── demarreurs_progressifs ​                                                                                                                                                    
 +│   ├── domestiques
 +│   ├── energie
 +│   ├── fiches
 +│   ├── haute_tension
 +│   ├── mecanique
 +│   │   ├── hydraulique
 +│   │   └── pneumatique
 +│   ├── nomenclatures
 +│   ├── process
 +│   ├── protections
 +│   ├── recepteurs
 +│   ├── references
 +│   ├── semiconducteurs
 +│   ├── sources
 +│   ├── variateurs_de_frequence
 +│   └── vignettes
 +├── ELEMENTS.LICENSE
 +├── examples
 +│   ├── 741.qet
 +│   ├── ArduinoLCD.qet
 +│   ├── convertisseur.qet
 +│   ├── Convoyeur_bouteilles.qet
 +│   ├── domestique.qet
 +│   ├── double_sens.qet
 +│   ├── grafcet.qet
 +│   ├── Habitat-Schemas_developpes.qet
 +│   ├── lmdg.qet
 +│   ├── m_000.qet
 +│   └── tremie_vibrante.qet
 +├── ico
 +│   ├── application-x-qet-element.ico
 +│   ├── application-x-qet-project.ico
 +│   ├── application-x-qet-titleblock.ico
 +│   └── qelectrotech.ico
 +├── Lancer QET.bat
 +├── lang
 +│   ├── qet_ar.qm
 +│   ├── qet_ca.qm
 +│   ├── qet_cs.qm
 +│   ├── qet_de.qm
 +│   ├── qet_el.qm
 +│   ├── qet_en.qm
 +│   ├── qet_es.qm
 +│   ├── qet_fr.qm
 +│   ├── qet_hr.qm
 +│   ├── qet_it.qm
 +│   ├── qet_pl.qm
 +│   ├── qet_pt.qm
 +│   ├── qet_ro.qm
 +│   ├── qet_ru.qm
 +│   ├── qt_ar.qm
 +│   ├── qt_cs.qm
 +│   ├── qt_de.qm
 +│   ├── qt_es.qm
 +│   ├── qt_fr.qm
 +│   ├── qt_it.qm
 +│   ├── qt_pl.qm
 +│   └── qt_pt.qm
 +├── LICENSE
 +├── qet_uninstall_file_associations.reg
 +├── README
 +├── register_filetypes.bat
 +└── titleblocks
 +    ├── A4_1.titleblock
 +    ├── default.titleblock
 +    ├── DIN_A4.titleblock
 +    ├── double-logo.titleblock
 +    └── single-logo.titleblock
 +
 +</​code>​
 +
 +
 +
 +  - Placer dans ce répertoire :
 +    * Un schéma de test nommé ''​test.qet''​ - celui-ci sera ouvert par le script de test s'il est appelé sans argument
 +    * Les scripts présentés dans la section suivante : ''​0-compil.bat'',​ ''​1-test.bat'',​ ''​2-package.bat''​ et ''​package.sh''​
 +  - 
 +==== Scripts ====
 +0-compil.bat :
 +<​code>​
 +@echo off
 +
 +rem Dossier de travail
 +set working_directory=%~dp0
 +cd /d %working_directory%
 +
 +rem Mise a jour du depot SVN
 +svn up
 +
 +rem compilation
 +qmake
 +mingw32-make -f Makefile.Release
 +
 +rem copie du fichier si la compilation a reussi
 +if %errorlevel%==0 (
 + copy /Y release\qelectrotech.exe bin\
 + echo La compilation a reussi.
 +) else (
 + echo La compilation a echoue.
 +)
 +</​code>​
 +
 +1-test.bat :
 +<​code>​
 +@echo off
 +
 +rem Dossier de travail
 +set working_directory=%~dp0
 +cd /d %working_directory%
 +
 +rem choisit des schemas a ouvrir
 +if "​%1"​ == ""​ (
 + rem schema a ouvrir par defaut pour le test
 + set args=test.qet
 +) else (
 + set args=%*
 +)
 +rem set args=%*
 +rem lance QElectroTech
 +@start bin\qelectrotech.exe --common-elements-dir=elements/​ -style plastique %args%
 +</​code>​
 +
 +
 +=== Cygwin ===
 +
 +
 +svn_donwload_tag.sh
 +
 +<code bash>
 +#​!/​bin/​bash ​
 +
 +# trouve la derniere revision de svn://​svn.tuxfamily.org/​svnroot/​qet/​qet/​branches/​0.3
 +if [ -z "​$HEAD"​ ] ; then
 +#HEAD=$(svn --xml info svn://​svn.tuxfamily.org/​svnroot/​qet/​qet/​branches/​0.3 | grep revision=\"​ | tail -1 | cut -d\" -f2) #branche 0.3
 +HEAD=$(svn --xml info svn://​svn.tuxfamily.org/​svnroot/​qet/​qet/​trunk | grep revision=\"​ | tail -1 | cut -d\" -f2) #trunk
 +#HEAD=$(svn --xml info svn://​svn.tuxfamily.org/​svnroot/​qet/​qet/​tags/​0.3a | grep revision=\"​ | tail -1 | cut -d\" -f2) #tagg 0.3 alpha
 +echo  -e "​\033[1;​34mdownload source qelectrotech-0.30.r$HEAD.\033[m"​
 +fi
 +
 +#variables repertoires de travail
 +#​DEFAULT_DIR="/​home/​laurent"​
 +#​TEMP_DIR="/​home/​laurent"​
 +#svn export ​
 +
 +#cd $TEMP_DIR
 +svn export svn://​svn.tuxfamily.org/​svnroot/​qet/​qet/​trunk qelectrotech_trunk/​
 +#tag de la version ​
 +cd qelectrotech_trunk/​sources
 +sed -i "​s/​const QString displayedVersion = \"​0.4-dev\"/​const QString displayedVersion = \"​0.4-dev+svn$HEAD\"/"​ qet.h
 +
 +exit
 +</​code>​
 +
 +== builder.bat ==
 +
 +
 +<code bash>
 +rem Dossier de travail
 +set working_directory=%~dp0
 +cd /d %working_directory%\packaging_windows\files\bin
 +del /s *.exe
 +cd ..
 +rd elements /S /Q 
 +rd examples /S /Q 
 +rd lang /S /Q 
 +rd titleblocks /S /Q 
 +
 +MD elements examples lang titleblocks
 +
 +cd /d %working_directory%\qelectrotech-0.3+svn-x86-win32-readytouse\bin
 +del /s *.exe
 +cd ..
 +rd elements /S /Q 
 +rd examples /S /Q 
 +rd lang /S /Q 
 +rd titleblocks /S /Q 
 +
 +MD elements examples lang titleblocks
 +
 +cd /d %working_directory%
 +rd qelectrotech_trunk ​ /S /Q
 +
 +move c:​\cygwin64\home\laurent\qelectrotech_trunk C:​\Users\laurent\Desktop
 +cd /d %working_directory%\qelectrotech_trunk
 +qmake
 +mingw32-make -j9 -f Makefile.Release
 +
 +rem copie du fichier si la compilation a reussi
 +if %errorlevel%==0 (
 +
 +    copy /Y release\qelectrotech.exe ..\packaging_windows\files\bin
 +    copy /Y release\qelectrotech.exe "​..\qelectrotech-0.3+svn-x86-win32-readytouse"​\bin
 +    ​
 +    xcopy /Y elements ..\packaging_windows\files\elements /s 
 +    xcopy /Y elements ..\qelectrotech-0.3+svn-x86-win32-readytouse\elements /​s  ​
 +
 +    xcopy /Y examples ..\packaging_windows\files\examples /s
 +    xcopy /Y examples ..\qelectrotech-0.3+svn-x86-win32-readytouse\examples /s 
 +
 +    xcopy /Y lang\*.qm ..\packaging_windows\files\lang /s
 +    xcopy /Y lang\*.qm ..\qelectrotech-0.3+svn-x86-win32-readytouse\lang /s
 +    ​
 +    xcopy /Y titleblocks ..\packaging_windows\files\titleblocks /s
 +    xcopy /Y titleblocks ..\qelectrotech-0.3+svn-x86-win32-readytouse\titleblocks /s
 +
 +    cd /d %working_directory%\qt_qm
 +
 +    xcopy /Y  ..\packaging_windows\files\lang /s
 +    xcopy /Y  ..\qelectrotech-0.3+svn-x86-win32-readytouse\lang /s
 +
 +          ​
 + 
 +    cd /d %working_directory%\packaging_windows ​
 +    makensis.exe QET.nsi
 +
 +) else (
 + echo La compilation a echoue.
 +)
 +
 +pause 
 +
 +</​code>​
Imprimer/exporter