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édentesRévision précédente
Prochaine révision
Révision précédente
doc:dev_windows [11/07/2019 21:31] – [Compiler QET under Windows with MinGW] scorpio810doc:dev_windows [27/08/2020 10:58] (Version actuelle) cborn
Ligne 1: Ligne 1:
 +====== Développement sous Windows ======
  
 +Cette page regroupe quelques astuces pour le développement de QET sous Windows.
 +
 +[[winstatic: winstatic|Windows Static Build]]
 +
 +===== 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