====== 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 : 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 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 : 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; ==== 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 : cd /d D:\qet_packaging\ Y créer un répertoire bin : mkdir bin Faire un check out du répertoire trunk du dépôt Subversion : svn checkout svn://svn.tuxfamily.org/svnroot/qet/qet/trunk qelectrotech_trunk Ou pour ne pas charger le .svn du dépôt Subversion. svn export svn://svn.tuxfamily.org/svnroot/qet/qet/trunk qelectrotech_trunk __On lance la compilation__ qmake mingw32-make -f Makefile.Release ou avec un processeur tres puissant (8 cores) mingw32-make -j9 -f Makefile.Release 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__'' mingwm10.dll ''__on ajoute les dll de Qt C:\Qt\4.8.5\bin__'' QtCore4.dll QtGui4.dll QtNetwork4.dll QtSql4.dll QtSvg4.dll QtXml4.dll libgcc_s_dw2-1.dll libstdc++-6.dll ''__on ajoute un répertoire imageformats avec dedans__'' C:\Qt\4.8.5\plugins\imageformats qjpeg4.dll ''__on ajoute un répertoire sqldrivers avec dedans la dll__'' C:\Qt\4.8.5\plugins\sqldrivers qsqlite4.dll ----------------------------------------- === 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. qelectrotech-0.3b-x86-win32-readytouse$ tree . ├── 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 - 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 : @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. ) 1-test.bat : @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% === Cygwin === svn_donwload_tag.sh #!/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 == builder.bat == 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