2010-05-02 156 views
7

我可以通过GCC实现这一点:如何告诉cmake不要创建控制台窗口?

gcc -mwindows -o simple simple.c 

但只能找到这cmake的:

add_executable(simple WIN32 simple.c) 

但它不是完全一样-mwindows

这将需要的入口点是WinMain,

gcc -mwindows不需要这个(可以是main)。

我该如何正确地做到这一点?

+0

这是http://stackoverflow.com/questions/2752792/whats-the-equivalent-of-gccs-mwindows-option-in-cmake的副本。 – MKroehnert 2010-05-16 08:59:48

回答

12

如果你使用:

add_executable(simple WIN32 simple.c) 

,那么你必须提供一个WinMain函数。这就是WIN32标志add_executable意味着:这意味着你将使它成为一个Windows程序,并提供一个WinMain函数。

如果您真的在编写Windows应用程序,我会建议您这样做。这是最有意义的,最适合于底层操作系统的。但是,如果您仍然希望传递gcc“-mwindows”标志,但是仍然使用“main”标志,则只需将“-mwindows”添加到CMAKE_CXX_FLAGS和/或CMAKE_C_FLAGS值即可。您可以通过交互方式调整这些变量包括“-mwindows”中的cmake-GUI程序做到这一点,或者你也可以用命令行的CMake做到这一点,就像这样:

cmake -DCMAKE_C_FLAGS="-mwindows" 
+0

刚发现这个,它解决了cmake加上一个无控制台的Windows应用程序非常恼人的问题。特别是在cmake魔术被编织后,移除控制台的愿望很好地融入了这个项目中。谢谢! – Darakian 2017-10-23 15:06:17

1

正如DLRdave曾表示说,可执行文件将是一个win32,意味着它将以WinMain作为入口点,并成为一个Windows应用程序。

如果应用程序仍然是跨平台的,那么抑制控制台窗口但仍然允许使用main的通常方法是编写一个存储在SDL或SFML库中的存根WinMain,它只是简单地调用主函数全局变量__argc和__argv作为参数并返回其结果。

这可以防止应用程序拥有控制台窗口,但可以减少不必使用WinMain作为入口点的代码中断。