Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 编译所有不同的C++;使用CMake为每个可能的配置运行时_Visual Studio_Cmake - Fatal编程技术网

Visual studio 编译所有不同的C++;使用CMake为每个可能的配置运行时

Visual studio 编译所有不同的C++;使用CMake为每个可能的配置运行时,visual-studio,cmake,Visual Studio,Cmake,我正在尝试使用CMake为Visual Studio 2013生成解决方案, 我希望允许最终用户使用所有可能的运行时编译DLL(由于接口中的STL以及ABI不一样的事实…) 我想生成一个包含4种配置的解决方案: DebugMD-应编译为/MDd DebugMT-应编译为/MTd ReleaseMD-应编译为/MD ReleaseMT-应编译为/MT 我曾尝试使用生成器表达式,但无法使其为所有配置正确生成,它似乎会相互覆盖 例如,我尝试了以下方法: cmake_minimum_required(V

我正在尝试使用CMake为Visual Studio 2013生成解决方案, 我希望允许最终用户使用所有可能的运行时编译DLL(由于接口中的STL以及ABI不一样的事实…)

我想生成一个包含4种配置的解决方案:
DebugMD-应编译为/MDd
DebugMT-应编译为/MTd
ReleaseMD-应编译为/MD
ReleaseMT-应编译为/MT

我曾尝试使用生成器表达式,但无法使其为所有配置正确生成,它似乎会相互覆盖

例如,我尝试了以下方法:

cmake_minimum_required(VERSION 3.15)

cmake_policy(SET CMP0091 NEW)

# set the project name
project(test)

# add the executable
add_executable(test test1.cpp)
    
set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY "$<$<CONFIG:ReleaseMT>:MultiThreaded>")
set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY "$<$<CONFIG:DebugMT>:MultiThreadedDebug>")
set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY "$<$<CONFIG:DebugMD>:MultiThreadedDLLDebug>")
set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY "$<$<CONFIG:ReleaseMD>:MultiThreadedDLL>")
cmake_最低要求(3.15版)
cmake_策略(设置CMP0091新)
#设置项目名称
项目(测试)
#添加可执行文件
添加可执行文件(test test1.cpp)
set_属性(目标测试属性MSVC_运行时_库“$”)
set_属性(目标测试属性MSVC_运行时_库“$”)
set_属性(目标测试属性MSVC_运行时_库“$”)
set_属性(目标测试属性MSVC_运行时_库“$”)
(将CMAKE_配置_类型修改为“DebugMD;releasemad;DebugMT;ReleaseMT;MinSizeRel;RelWithDebInfo”后)


有人有什么建议来实现这种行为吗?

你有没有尝试过类似的方法

set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY
  "$<$<CONFIG:ReleaseMT>:MultiThreaded>"
  "$<$<CONFIG:DebugMT>:MultiThreadedDebug>"
  "$<$<CONFIG:DebugMD>:MultiThreadedDLLDebug>"
  "$<$<CONFIG:ReleaseMD>:MultiThreadedDLL>"
)
set_属性(目标测试属性MSVC_运行库
"$"
"$"
"$"
"$"
)

i、 e.在一次调用中合并所有配置,因为
set\u property()
不会追加但会覆盖以前的值…

谢谢,将所有配置追加到单个set\u属性行中工作:D