Как указать требования условно в `conanfile.txt`?

Мне приходится иметь дело с кроссплатформенным приложением, которому требуется дополнительная сторонняя библиотека для Windows, но не для Linux (и эта библиотека все равно не поддерживает Linux). Я упаковал библиотеку в пакет Conan, поддерживающий только `os=Windows complier="Visual Studio". Теперь, если я поставлю эту библиотеку как

[requires]
Library/1.2.3@foo/bar

в моем conanfile.txt, conan install логически завершится ошибкой Missing prebuilt package в Linux.

Итак, есть ли способ указать необходимые пакеты условно в conanfile.txt? Что-то вроде Library/1.2.3@foo/bar [os="Windows"]. Я прочитал документы Конана, но ничего не нашел.

Или сказать conan install игнорировать ошибку?

Или мне повезло только в том, что я использую два разных conanfile.txt на двух платформах?

Я не могу использовать conanfile.py, так как Конан не управляет процессом сборки, только зависимостями.


person Metaphox    schedule 30.07.2019    source источник
comment
Если процесс сборки управляется CMake, вы можете проверить ОС здесь и используйте два разных файла conanfile.txts.   -  person nada    schedule 30.07.2019
comment
@nada спасибо за комментарий, мне просто интересно, могу ли я как-то избежать использования двух conanfiles (с разницей в одну строку).   -  person Metaphox    schedule 30.07.2019
comment
Я бы написал для этого скрипт в CMake или около того ^^, наверняка есть более элегантное решение   -  person nada    schedule 30.07.2019
comment
Вы по-прежнему сможете использовать conanfile.py только для зависимостей. Использование файла python не требует управления зданием.   -  person John    schedule 11.12.2020
comment
@Джон спасибо за совет. Это был пилотный проект для других проектов C++ по переходу на использование Conan в качестве менеджера зависимостей. В итоге я предложил два txt-файла для каждой платформы и предложил разработчикам, желающим изучить Python, написать свой собственный файл conanfile.py.   -  person Metaphox    schedule 12.12.2020


Ответы (1)


Я бы сказал, что лучший вариант в вашем случае — это conanfile.py, но поскольку вы не можете его использовать, вам нужно будет сохранить два файла conanfile.txt, по одному на каждую платформу.

Невозможно добавить условие в conanfile.txt, потому что это потребует больших усилий при разработке, а conafile.py может работать с условиями, поскольку это скрипт на Python.

Решение @nada хорошее, вы можете использовать CMake для вызова conan в соответствии с вашей ОС, но вы также можете попробовать cmake-conan, что лучше подходит для вашего конкретного сценария.

person uilianries    schedule 30.07.2019