2010-05-02 14 views
7

puedo lograr esto mediante gcc:¿Cómo le digo a cmake que no cree una ventana de consola?

gcc -mwindows -o simple simple.c 

Pero sólo encontrar esto en cmake:

add_executable(simple WIN32 simple.c) 

Pero no es exactamente el mismo que -mwindows,

Esto requerirá el punto de entrada a ser WinMain,

mientras que gcc -mwindows no requiere esto (puede ser main).

¿Cómo debo hacerlo correctamente?

+0

Este es un duplicado de http://stackoverflow.com/questions/2752792/whats-the-equivalent-of-gccs-mwindows-option-in-cmake. – MKroehnert

Respuesta

12

Si utiliza:

add_executable(simple WIN32 simple.c) 

entonces usted debe proporcionar una función WinMain. Eso es lo que significa la bandera WIN32 para agregar_ejecutable: significa que vas a convertirlo en un programa de Windows y proporcionar una función WinMain.

Recomendaría hacerlo de esta manera si realmente está escribiendo una aplicación de Windows. Es lo que tiene más sentido y se ajusta más naturalmente con el sistema operativo subyacente.

Sin embargo, si aún desea pasar gcc el distintivo "-mwindows", pero use un "principal" de todos modos, simplemente agregue "-mwindows" al valor CMAKE_CXX_FLAGS y/o CMAKE_C_FLAGS. Usted puede hacer esto en el programa cmake-gui mediante el ajuste de las variables de forma interactiva para incluir "-mwindows" o puede hacerlo con la línea de comandos CMake, así:

cmake -DCMAKE_C_FLAGS="-mwindows" 
+0

Acabo de encontrar esto y resolvió un problema muy molesto de cmake más una aplicación de Windows sin consola. En particular, el deseo de quitar la consola se hizo bien en el proyecto y mucho después de que la magia cmake había sido tejida. ¡GRACIAS! – Darakian

1

Como DLRdave ha dicho que dice que la voluntad ejecutable ser un win32 significa que tendrá WinMain como punto de entrada y será una aplicación de Windows.

Si la aplicación debe ser multiplataforma, entonces el medio habitual para suprimir la ventana de la consola pero aún permitir el uso de main es escribir un stub WinMain como se encuentra en las bibliotecas SDL o SFML que simplemente llama a la función principal con el las variables globales __argc y __argv como argumentos y devuelve su resultado.

Esto evita que la aplicación tenga una ventana de consola, pero reduce la interrupción del código de tener que usar WinMain como punto de entrada.

Cuestiones relacionadas