gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:41:41 26 4
gpt4 key购买 nike

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

我可以使用/MD 设置所有要编译的内容或 /MT (和相应的调试)在根 CMakeLists.txt 中进行简单设置。

例如,要强制/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"
)

有什么解决办法吗?

最佳答案

好!我让它工作了!

我发现这个问题有一个糟糕的解决方案,将库分成两个目录并在每个目录中都有 set() 。那会奏效,但这将是相当多的工作。

How can I set specific compiler flags for a specific target in a specific build configuration using CMake?

该解决方案有一条评论,其中包含指向此问题的链接:

http://public.kitware.com/Bug/view.php?id=6493

实际上只是在 2013-06-03 12:52 标记为已修复!这意味着该解决方案在 cmake 的最新稳定版本中尚不可用。然而,布拉德·金和斯蒂芬·凯利所做的工作确实运行良好。它可以从此处找到的每日构建中下载:

http://www.cmake.org/files/dev/?C=M;O=D

使用新命令的方法有点棘手,我写的是:

function(StaticCompile)
target_compile_options( ${PROJECT_NAME}
PUBLIC "/MT$<$<STREQUAL:$<CONFIGURATION>,Debug>:d>"
)
endfunction()

英文的意思是:如果字符串“$ ”等于“Debug”,则在“/MT”后输出“d”,否则不输出。

然后,在我有一个需要使用/MT 或/MTd 编译的目标的任何地方,我都使用如下命令:
project(wpkg)

add_executable( ${PROJECT_NAME}
wpkg.cpp
license.cpp
)

StaticCompile()

结果完全符合预期,没有任何目录或其他技巧!

它适用于我现在可用的版本 cmake-2.8.11.20130803-gd5dc2-win32-x86.exe。真的很酷! 8-)

关于dll - 是否可以在同一个 CMakeLists.txt 中使用/MT 设置项目,而使用/MD 设置其他项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18065299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com