如何使用Conan for CMake指定Visual Studio编译器工具集?

时间:2017-02-08 21:45:08

标签: visual-studio cmake conan

Visual Studio提供了工具集的概念,例如:对于Visual Studio 2015和可选的"Windows XP Support for C++" package,有工具集v140v140_xp。如果有人添加了“ Clang with Microsoft CodeGen ”包,则会有v140_clang_c2

使用CMake,我可以使用-T命令行标志来指定用于使用CMake生成的解决方案文件的工具集,例如cmake -T v140_clang_c2将为所有目标生成项目解决方案文件,其中“ Visual Studio 2015 - Clang with Microsoft CodeGen(v140_clang_c2)”配置为“平台工具集”。

如何在Windows上使用适当安装的Visual Studio告诉 Conan 使用特定工具集?优选用于使用CMake作为发生器的conanfiles。

我能想出的唯一方法是为所有项目添加一个额外的选项/ conanfile.py我想使用不同的工具集并添加另一个包选项(例如用作-o toolset=v140_clang_c2)被添加到CMake初始调用的命令行中。

我希望可变性成为包管理器本身的一部分,而不是包装编写者的责任。

1 个答案:

答案 0 :(得分:3)

不,柯南不提供开箱即用的功能。

(更新:现在确实如此,因为柯南0.29)

如果您现在想要使用它们,可以自定义conan以处理不同的工具集,我会执行以下操作:

首先,扩展当前设置,以考虑工具集。如果您广泛使用不同的工具集,我将不会使用选项。您可以尝试将它们定义为Visual Studio的全局:

compiler:
        ...
        Visual Studio:
            runtime: [MD, MT, MTd, MDd]
            version: ["8", "9", "10", "11", "12", "14", "15"]
            toolset: [None, v140, v140_xp] 

或者如果您想要更具体,请按照版本定义它们,例如:

compiler:
        ...
        Visual Studio:
            version: 
                 "12": 
                     toolset: [None, v120, v120_xp] 
                 "14": 
                     toolset: [None, v140, v140_xp]

然后,确实将选项传递给cmake的责任在于包创建者。我当然会添加

"-T %s" % self.settings.compiler.toolset
# or
"-T %s" % self.settings.compiler.version.toolset

到cmake命令参数。

可能值得打开一个问题,并尽可能与维护人员讨论,使其成为一项功能:https://github.com/conan-io/conan