Gil*_*ili 4 cmake visual-studio
我想构建我的应用程序,使调试模式是一个控制台应用程序,发布模式是一个Win32应用程序.根据我需要添加的文档WIN32,add_executable取决于我是否需要控制台应用程序.
因为我使用的是Visual Studio,所以我无法使用CMAKE_BUILD_TYPE(生成的项目包含多个配置).如何告诉CMAKE使用WIN32发布版本并将其省略用于调试版本?
引用http://www.cmake.org/Wiki/VSConfigSpecificSettings
if(WIN32)
set_target_properties(WindowApplicationExample PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
set_target_properties(WindowApplicationExample PROPERTIES COMPILE_DEFINITIONS_DEBUG "_CONSOLE")
set_target_properties(WindowApplicationExample PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
set_target_properties(WindowApplicationExample PROPERTIES COMPILE_DEFINITIONS_RELWITHDEBINFO "_CONSOLE")
set_target_properties(WindowApplicationExample PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:windows")
set_target_properties(WindowApplicationExample PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:windows")
endif(WIN32)
Run Code Online (Sandbox Code Playgroud)
更新:由于错误,此功能在最新版本中被破坏.我发现一个解决方法是指定"/ SUBSYSTEM:windows"而不是"/ SUBSYSTEM:WINDOWS".这看起来似乎有些原因.
不知道这个错误是否已经在 CMake 中修复了。我正在使用 VC++ 2010 express 和 CMake v2.8.10.1(目前是最新版本),但我仍然遇到完全相同的问题。
这里提供了一个可行的解决方案:通过添加以下内容来修改您的源代码(例如 main.cpp/main.c):
#ifndef NDEBUG
#pragma comment(linker, "/SUBSYSTEM:CONSOLE")
#endif
Run Code Online (Sandbox Code Playgroud)
或者,您可以将链接器标志“/SUBSYSTEM:WINDOWS”添加到发布模式构建中。我正在使用这个似乎有效的定义:
#ifdef _MSC_VER
# ifdef NDEBUG
# pragma comment(linker, "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup")
# else
# pragma comment(linker, "/SUBSYSTEM:CONSOLE")
# endif
#endif
Run Code Online (Sandbox Code Playgroud)
如果您已定义,请使用入口点设置以避免链接器错误:
int main(int argc, char* argv[]) { ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8924 次 |
| 最近记录: |