相关疑难解决方法(0)

是否可以在同一个 CMakeLists.txt 中使用 /MT 设置项目,而使用 /MD 设置其他项目?

我有一个项目,我为其创建了静态和动态版本的库。这些工具与静态版本相关联,因此在最终系统上运行它们不需要特殊的 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)

有什么解决办法吗?

dll static cmake visual-studio-2012

3
推荐指数
1
解决办法
1107
查看次数

CMAKE - 为库设置编译标志

我有一个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)

c++ flags cmake libraries

2
推荐指数
1
解决办法
7217
查看次数

标签 统计

cmake ×2

c++ ×1

dll ×1

flags ×1

libraries ×1

static ×1

visual-studio-2012 ×1