【问题标题】:How to specify Visual Studio compiler toolset with Conan for CMake?如何使用柯南为 CMake 指定 Visual Studio 编译器工具集?
【发布时间】:2017-02-08 21:45:07
【问题描述】:

Visual Studio 提供了 toolset 的概念,例如对于 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)”配置为所有目标的“平台工具集”。 p>

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

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

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

【问题讨论】:

    标签: visual-studio cmake conan


    【解决方案1】:

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

    (更新:现在可以了,因为柯南 0.29)

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

    首先,扩展当前设置以考虑工具集。如果您广泛使用不同的工具集,我不会使用选项。您可以尝试将它们定义为 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

    【讨论】:

    • 感谢您的解决方法。我有posted a feature request
    • 柯南 0.29 的功能请求已完成。我不知道它在文档中的位置。
    • 这很隐蔽,但文档中有一个partial list of the toolsets。如需更多最新列表,请查看$HOME/.conan 中的settings.yml 文件。
    猜你喜欢
    • 2021-11-14
    • 2016-06-03
    • 2012-10-13
    • 1970-01-01
    • 2014-07-10
    • 2021-12-15
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多