嗨,我有一个问题,我有一个C++项目,该项目使用select C++ 11/14功能,这些功能最多只能在CTP_Nov2013编译器工具集中提供,而对于MSVC编译器而言。我知道有一个非常相似的主题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位版本,但是如果他/她安装了CTP,我希望对“最终用户”隐藏MSVC编译器的功能。
我如何编写脚本并从命令行调用它,使其对Visual Studio和NMake Makefiles生成器以及CMake的首次调用均有效?
最佳答案
使用@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()