我有一个项目,我为其创建了静态和动态版本的库。这些工具与静态版本相关联,因此在最终系统上运行它们不需要特殊的 DLL。
我可以使用根 CMakeLists.txt 中的一个简单设置来设置所有内容以使用 /MD或/MT(以及相应的调试)进行编译。
例如,要强制 /MT 我可以使用以下内容:
set ( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT" )
set ( CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT" )
set ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /MTd" )
set ( CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_RELEASE} /MTd" )
Run Code Online (Sandbox Code Playgroud)
但是,这意味着动态库被编译/MT是错误的。是否可以在每个项目的基础上做同样的事情?毕竟,一旦创建了解决方案,我就可以编辑每个项目/MD并将/MT对象修复为我需要的。cmake 能做到吗?会很方便。
我查看了set_target_properties()但似乎没有采用CMAKE_C_FLAGS_<type>变量,如果我只是设置一组标准的标志,它不会特定于调试或发布。
以下确实设置了属性,但我似乎没有选择调试和发布选项。
set_target_properties( ${PROJECT_NAME} PROPERTIES
COMPILE_FLAGS "/MT"
)
Run Code Online (Sandbox Code Playgroud)
有什么解决办法吗?
我有一个CMakeLists.txt脚本来编译我的库.问题是我无法为库设置编译标志.
我试过了
SET(CMAKE_CXX_FLAGS "/W3 /nologo /EHsc")
SET(CMAKE_CXX_FLAGS_DEBUG "/MTd /Od /Ob0 /Zi /RTC1 /DDEBUG /D_DEBUG")
SET(CMAKE_CXX_FLAGS_RELEASE "/MT /O2 /Ob2 /DNDEBUG")
SET(CMAKE_C_FLAGS "/W3 /nologo /EHsc")
SET(CMAKE_C_FLAGS_DEBUG "/MTd /Od /Ob0 /Zi /RTC1 /DDEBUG /D_DEBUG")
SET(CMAKE_C_FLAGS_RELEASE "/MT /O2 /Ob2 /DNDEBUG")
SET(CMAKE_EXE_LINKER_FLAGS "/W3 /nologo /EHsc")
SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "/MTd /Od /Ob0 /Zi /RTC1 /DDEBUG /D_DEBUG")
SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "/MT /O2 /Ob2 /DNDEBUG")
SET(CMAKE_MODULE_LINKER_FLAGS "/W3 /nologo /EHsc")
SET(CMAKE_MODULE_LINKER_FLAGS_DEBUG "/MTd /Od /Ob0 /Zi /RTC1 /DDEBUG /D_DEBUG")
SET(CMAKE_MODULE_LINKER_FLAGS_RELEASE "/MT /O2 /Ob2 /DNDEBUG")
SET(CMAKE_SHARED_LINKER_FLAGS "/W3 /nologo /EHsc")
SET(CMAKE_SHARED_LINKER_FLAGS_DEBUG "/MTd /Od /Ob0 /Zi /RTC1 …Run Code Online (Sandbox Code Playgroud)