如何使用 Conan for CMake 指定 Visual Studio 编译器工具集?
How to specify Visual Studio compiler toolset with Conan for CMake?
Visual Studio 提供了 工具集 的概念,例如对于 Visual Studio 2015 和可选的 "Windows XP Support for C++" package,有工具集 v140
和 v140_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 上的 Conan 安装了适当的 Visual Studio 使用特定的工具集?最好是使用 CMake 作为生成器的 conanfiles。
我能想到的唯一方法是为所有 projects/conanfile.py 添加一个附加选项我想使用不同的工具集并添加另一个包选项(例如用作 -o toolset=v140_clang_c2
) 添加到 CMake 初始调用的命令行中。
我希望可变性成为包管理器本身的一部分,而不是包编写者的责任。
不,柯南不提供开箱即用的功能。
(更新:现在可以了,因为柯南 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
Visual Studio 提供了 工具集 的概念,例如对于 Visual Studio 2015 和可选的 "Windows XP Support for C++" package,有工具集 v140
和 v140_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 上的 Conan 安装了适当的 Visual Studio 使用特定的工具集?最好是使用 CMake 作为生成器的 conanfiles。
我能想到的唯一方法是为所有 projects/conanfile.py 添加一个附加选项我想使用不同的工具集并添加另一个包选项(例如用作 -o toolset=v140_clang_c2
) 添加到 CMake 初始调用的命令行中。
我希望可变性成为包管理器本身的一部分,而不是包编写者的责任。
不,柯南不提供开箱即用的功能。
(更新:现在可以了,因为柯南 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