cmake中gcc的-mwindows选项相当于什么?

我正在关注tuto:

http://zetcode.com/tutorials/gtktutorial/firstprograms/

它的工作,但每次我双击可执行文件,有一个控制台,我不想在那里。

我如何摆脱那个控制台?

我试过这个:

add_executable(Cmd WIN32 cmd.c) 

但是得到这个致命的错误:

 MSVCRTD.lib(crtexew.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup Cmd.exe : fatal error LNK1120: 1 unresolved externals 

直接使用gcc工作:

 gcc -o Cmd cmd.c -mwindows .. 

我猜它与input函数有关: int main( int argc, char *argv[]) ,但为什么gcc工作?

我怎样才能使它与cmake工作?

UPDATE

让我在这里粘贴源代码为了方便:

 #include <gtk/gtk.h> int main( int argc, char *argv[]) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(window); gtk_main(); return 0; } 

UPDATE2

为什么gcc -mwindows可以工作,但是add_executable(Cmd WIN32 cmd.c)不是?

也许这不是cmake中-mwindows的等价物?

Solutions Collecting From Web of "cmake中gcc的-mwindows选项相当于什么?"

add_executable(Cmd WIN32 cmd.c)

告诉CMake这是一个Windows程序,它寻找WinMain而不是主要。 如果你想看到正在使用的标志,你可以运行make VERBOSE = 1。 问题可能是你如何为GTK应用程序定义WinMain? 我知道在Qt中,你链接到一个为你定义它的库。

如果你希望你的程序在控制台模式下运行(例如一个main函数),你必须在MSVC的项目属性中指定它。 你现在正在使用的是一个窗口模式的项目(即一个WinMain函数,你没有,因此错误)。

但是,如果你不想得到丑陋的控制台窗口,你想使用窗口模式(即将您的main功能变成一个propper WinMain功能)。 这样你的正常窗口就会显示出来。

编辑:顺便说一下,你真的不应该命名你的程序“CMD”,这是Windows的命令解释器的名称。

您可以设置这些链接器标志有一个main()入口点和没有控制台:

 SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /subsystem:windows /ENTRY:mainCRTStartup") 

有关更多信息,请参阅链接器标志的答案 ,以及如何在cmake设置标志的答案 。

根据与ADD_EXECUTABLE使用WIN32标志的CMake文档 :

当这个属性被设置为true时,在Windows上链接的可执行文件将被创建为一个WinMain()入口点,而不仅仅是main(),这使得它成为一个GUI可执行文件而不是控制台应用程序。 请参阅CMAKE_MFC_FLAG变量文档以配置使用MFC for WinMain可执行文件。

但是,您的程序的入口点是main()而不是WinMain() 。 你应该做什么,而不是,是省略WIN32标志,但你需要链接到libgtk。 因此,您可以使用TARGET_LINK_LIBRARIES:

 FIND_PACKAGE(GTK2 2.6 REQUIRED gtk) INCLUDE_DIRECTORIES(${GTK2_INCLUDE_DIRS}) LINK_DIRECTORIES(${GTK2_LIBRARIES}) ADD_EXECUTABLE(myprogramname source1 source2 ... sourceN) TARGET_LINK_LIBRARIES(myprogramname ${GTK2_LIBRARIES})