Ceci est une ancienne révision du document !
Table des matières
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 CollabNet ; attention, il faut être inscrit pour bénéficier des téléchargements.
- TortoiseSVN est un front-end graphique pour Subversion *
- Qt OpenSource pour Windows (choisissez la version “minGW 4.82”) Qt libraries 4.8.6 for Windows.
- gdb.exe est fourni par MingW : http://sourceforge.net/project/showfiles.php?group_id=2435
- 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
etpackage.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