Développement sous Windows

Cette page regroupe quelques astuces pour le développement de QET sous Windows.

Windows Static Build

Utilitaires

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
  1. 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
Imprimer/exporter