====== 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