Как указать набор инструментов компилятора Visual Studio с Conan для CMake?

Visual Studio предлагает понятие наборов инструментов, например для Visual Studio 2015 и дополнительного пакета «Поддержка Windows XP для C ++» есть наборы инструментов v140 и v140_xp. В случае, если кто-то добавил пакет «Clang with Microsoft CodeGen», есть v140_clang_c2.

С CMake я могу использовать флаг командной строки -T, чтобы указать набор инструментов, который будет использоваться для файлов решений, созданных с помощью CMake, например cmake -T v140_clang_c2 сгенерирует файл решения проекта с «Visual Studio 2015 - Clang с Microsoft CodeGen (v140_clang_c2)», настроенным как «Platform Toolset» для всех целей.

Как я могу сказать Conan в Windows с соответствующей установленной Visual Studio, что нужно использовать определенный набор инструментов? Желательно для conanfiles, использующих CMake в качестве генератора.

Единственный способ, который я мог придумать, - это добавить дополнительный параметр ко всем проектам / conanfile.py, который я хотел бы использовать с разными наборами инструментов, и добавить еще один параметр пакета (например, используемый как -o toolset=v140_clang_c2) для добавления в командную строку первоначальный вызов CMake.

Я ожидал, что эта изменчивость будет частью самого диспетчера пакетов, а не ответственностью авторов пакетов.


person Torbjörn    schedule 08.02.2017    source источник


Ответы (1)


Нет, conan не предоставляет эту функциональность из коробки.

(ОБНОВЛЕНИЕ: теперь работает, начиная с версии Conan 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

person drodri    schedule 08.02.2017
comment
Спасибо за обходной путь. Я отправил запрос функции. - person Torbjörn; 09.02.2017
comment
Запрос функции выполнен для conan 0.29. Я не могу понять, где в документах он живет. - person TBBle; 20.03.2018
comment
Это довольно скрыто, но есть частичный список наборов инструментов в документации. Чтобы получить более свежий список, проверьте файл settings.yml в вашем $HOME/.conan . - person liberforce; 03.04.2018