Utiliser Qt comme build system
Par Cédric Tabin le samedi 05.10.2013, 12:00 - C/C++ - Lien permanent
Lorsque l'on veut créer un petit exécutable simple, on ne songe pas à utiliser Qt et son build system ultra-complet. Surtout si on ne veux pas de dépendance sur les librairies de Qt... Toutefois, dans le cadre d'un projet plus grand, il peut être très utile de garder le même système pour compiler le tout. Et bien sur le tout en cross-platform !
Il est pourtant possible d'utiliser le framework Qt uniquement pour configurer et compiler son projet. Et cela se fait de manière ultra simple dans le fichier pro:
TARGET = sample TEMPLATE = app CONFIG += console CONFIG -= qt SOURCES = main.cpp
La document de la variable CONFIG se trouve ici. A noter que lorsque fonction main standard est utilisée, il est nécessaire d'ajouter console pour pouvoir compiler sous windows. Sinon, une erreur de ce style va se produire
MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup
Le fichier main.cpp est tout simple:
[cpp] #include <iostream> int main(int argc, char* argv[]) { std::cout << "Simple console application" << std::endl; }
Lorsque vous lancez l'exécutable sous windows, une fenêtre console (Windows Shell) s'ouvre pour afficher le message et se referme instantanément. Dans mon cas, cet exécutable est voué à faire une tâche en arrière-plan et évidemment l'affichage de cette fenêtre n'est pas voulue (elle apparait même si aucun message n'est affiché).
En arrière-plan, Qt utilise Visual Studio 12 Express Desktop pour compiler. Et j'ai trouvé une solution qui permet de contourner le souci:
[cpp] #include <iostream> #if defined _WIN32 and defined _MSC_VER # pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup") #endif int main(int argc, char* argv[]) { std::cout << "Simple console application" << std::endl; }
J'ai mis les sources dans le fichier en annexe.