嗨,我有一个问题,我有一个使用select C ++ 11/14功能的C ++项目,MSVC编译器最多只能出现在CTP_Nov2013编译器工具集中。我知道有一个非常相似的主题here,最相关的答案是工具集不能在脚本中修改,因为最终用户会想要修补它。
我找到了一种通过命令实现我想要的方法
set(CMAKE_GENERATOR_TOOLSET "CTP_Nov2013" CACHE STRING "Platform Toolset" FORCE)
set(CMAKE_VS_PLATFORM_TOOLSET "CTP_Nov2013" CACHE STRING "Platform Toolset" FORCE)
然而,问题是脚本需要运行两次才能使其生效。由于使用
调用cmake命令行cmake -G"Visual Studio 12 2013 Win64"
已经选择了一个工具集,但我立即希望覆盖合并到所选生成器的x64配置中的工具集。最终,用户通常使用生成器规范从命令行中选择32/64位构建,但我希望隐藏MSVC编译器无法从"最终用户"以防他/她安装了CTP。
如何编写脚本并从命令行调用它,以便它适用于Visual Studio和NMake Makefiles生成器以及第一次调用CMake?
答案 0 :(得分:0)
使用@Tanuki和 set_target_properties 的回复,您可以强制在目标中使用平台工具集
if (CMAKE_VS_PLATFORM_TOOLSET MATCHES "CTP_Nov2013")
set_target_properties(${your_target}
PROPERTIES
PLATFORM_TOOLSET "${CMAKE_VS_PLATFORM_TOOLSET}")
endif()