如何告诉cmake不要创建控制台窗口?

时间:2010-05-02 14:29:07

标签: cmake

我可以通过gcc实现这一点:

gcc -mwindows -o simple simple.c

但只能在cmake中找到:

add_executable(simple WIN32 simple.c)

但它与-mwindows

并不完全相同

这将要求输入点为WinMain

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

我该怎么做呢?

3 个答案:

答案 0 :(得分:15)

如果您使用:

add_executable(simple WIN32 simple.c)

然后你必须提供WinMain功能。这就是add_executable的WIN32标志意味着:它意味着你将把它变成一个Windows程序,并提供一个WinMain函数。

如果您真的在编写Windows应用程序,我建议您这样做。这是最有意义的,最适合底层操作系统的。

但是,如果你仍然希望传递gcc“-mwindows”标志,但仍然使用“main”,那么只需将“-mwindows”添加到CMAKE_CXX_FLAGS和/或CMAKE_C_FLAGS值。您可以在cmake-gui程序中通过交互式调整这些变量以包含“-mwindows”来执行此操作,或者您可以使用命令行CMake执行此操作,如下所示:

cmake -DCMAKE_C_FLAGS="-mwindows"

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

您可以添加目标链接选项(对于新版本的Cmake)

target_link_options(simple PRIVATE -mwindows)

https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/i386-and-x86_002d64-Windows-Options.html