2010-05-02 1 views
7

Je peux y parvenir en gcc:Comment dire à cmake de ne pas créer une fenêtre de console?

gcc -mwindows -o simple simple.c 

Mais trouver que cela dans CMake:

add_executable(simple WIN32 simple.c) 

Mais ce n'est pas exactement la même chose que -mwindows,

cela nécessitera le point d'entrée être

alors que gcc -mwindows ne l'exige pas (peut être main).

Comment est-ce que je devrais le faire correctement?

+0

Ceci est un doublon de http://stackoverflow.com/questions/2752792/whats-the-equivalent-of-gccs-mwindows-option-in-cmake. – MKroehnert

Répondre

12

Si vous utilisez:

add_executable(simple WIN32 simple.c) 

vous devez fournir une fonction WinMain. C'est ce que signifie le drapeau WIN32 à add_executable: cela signifie que vous allez en faire un programme Windows et fournir une fonction WinMain.

Je recommanderais de le faire de cette façon si vous écrivez vraiment une application Windows. C'est ce qui est le plus logique et s'adapte le plus naturellement avec le système d'exploitation sous-jacent. Cependant, si vous voulez toujours passer le drapeau "-mwindows" à gcc, mais utilisez quand même un "main", ajoutez simplement "-mwindows" à la valeur CMAKE_CXX_FLAGS et/ou CMAKE_C_FLAGS. Vous pouvez le faire dans le programme de cmake-gui en ajustant les variables de manière interactive pour inclure « -mwindows » ou vous pouvez le faire avec la ligne de commande CMake, comme ceci:

cmake -DCMAKE_C_FLAGS="-mwindows" 
+0

Je viens de trouver cela et il a résolu un problème très ennuyeux de cmake plus une application windows sans console. En particulier le désir d'enlever la console a été bien intégré dans le projet et bien après que la magie de cmake ait été tissée. JE VOUS REMERCIE! – Darakian

1

Comme DLRdave a dit en disant que la volonté exécutable être un Win32 un signifie qu'il aura WinMain comme point d'entrée et être une application Windows.

Si l'application doit être encore plate-forme, alors les moyens habituels pour supprimer la fenêtre de la console tout en permettant l'utilisation de main est d'écrire un stub WinMain comme dans les bibliothèques SDL ou SFML qui appelle simplement la fonction principale avec le variables globales __argc et __argv en arguments et renvoie son résultat.

Cela empêche l'application d'avoir une fenêtre de console mais réduit la perturbation du code d'avoir à utiliser WinMain comme point d'entrée.

Questions connexes