我可以通过gcc实现这个功能:
gcc -mwindows -o simple simple.c
但只在CMake中找到这个:
add_executable(simple WIN32 simple.c)
但这并不完全与-mwindows
相同,
这将需要入口点为WinMain
,
而gcc -mwindows
则不需要这样(可以是main
)。
我应该如何正确地做呢?
我可以通过gcc实现这个功能:
gcc -mwindows -o simple simple.c
但只在CMake中找到这个:
add_executable(simple WIN32 simple.c)
但这并不完全与-mwindows
相同,
这将需要入口点为WinMain
,
而gcc -mwindows
则不需要这样(可以是main
)。
我应该如何正确地做呢?
如果您使用:
add_executable(simple WIN32 simple.c)
如果你想要编写一个Windows程序,那么必须提供一个WinMain函数。这就是在add_executable中添加WIN32标志的含义:它表示你将会创建一个Windows程序,并提供一个WinMain函数。
如果你确实在编写一个Windows应用程序,我建议按照这种方式来做。这是最有意义、最符合底层操作系统的方法。
然而,如果你仍想传递"-mwindows"标志给gcc,但是仍然想使用"main"函数,那么只需将"-mwindows"添加到CMAKE_CXX_FLAGS和/或CMAKE_C_FLAGS值中即可。你可以通过调整这些变量来交互式地包含"-mwindows",也可以通过命令行CMake来完成,像这样:
cmake -DCMAKE_C_FLAGS="-mwindows"
如果你需要在Windows和Linux上使用它
if (WIN32)
# /ENTRY:mainCRTStartup keeps the same "main" function instead of requiring "WinMain"
set(SUBSYSTEM_LINKER_OPTIONS "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
else()
set(SUBSYSTEM_LINKER_OPTIONS "-mwindows")
endif()
target_link_options(TargetName PRIVATE ${SUBSYSTEM_LINKER_OPTIONS})
您可以添加目标链接选项(适用于新版本的Cmake)
target_link_options(simple PRIVATE -mwindows)
https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/i386-and-x86_002d64-Windows-Options.html