【发布时间】:2013-08-05 18:37:57
【问题描述】:
我有一个项目,为此我创建了库的静态和动态版本。这些工具与静态版本链接,因此不需要特殊的 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" )
然而,这意味着动态库是用/MT 编译的,这是错误的。是否可以在每个项目的基础上做同样的事情?毕竟,一旦创建了解决方案,我就可以编辑每个项目并将/MD 和/MT 对象修复为我需要的对象。 cmake 可以做到吗?会很方便的。
我查看了set_target_properties(),但它似乎没有使用CMAKE_C_FLAGS_<type> 变量,如果我只是设置一组标准标志,它不会特定于调试或发布。
以下确实设置了属性,但我似乎没有调试和发布选项的选择。
set_target_properties( ${PROJECT_NAME} PROPERTIES
COMPILE_FLAGS "/MT"
)
有什么办法吗?
【问题讨论】:
标签: dll visual-studio-2012 static cmake