Как Conan может помочь CMake найти расположение DLL?

У меня есть проект, который создает общую библиотеку. Этот проект использует conan для управления своими зависимостями, одной из которых является OpenCV. В соответствии с корпоративной политикой мы не используем opencv_world и всегда использовать разделяемые библиотеки, поэтому conan устанавливает сотни файлов .lib и .dll.

Проект, который я разрабатываю, включает в себя ряд исполняемых файлов для запуска тестов - модульных, интеграционных, профильных и т. Д., Но эти тесты должны иметь путь к dll зависимостей. У меня вопрос, как управлять этими путями?

Есть ли способ автоматически передать местоположение файлов от conan к cmake?

Должен ли я найти местоположение файлов вручную и передать их вручную в CMake?


person ruipacheco    schedule 12.07.2019    source источник
comment
Да, но не вижу, как он даст мне путь к DLL.   -  person ruipacheco    schedule 12.07.2019
comment
Путь (пути) к библиотеке должен быть свойством сгенерированной цели, так как компилятор также нуждается в этих путях. Затем вы можете извлечь путь с помощью get_target_property. К сожалению, у меня нет под рукой установки Conan для тестирования.   -  person Botje    schedule 12.07.2019
comment
Мне нужно скопировать сами библиотеки DLL в ту же папку, где находятся мои модульные тесты, иначе они не будут работать, как говорится в вопросе.   -  person ruipacheco    schedule 12.07.2019
comment
Модульные тесты, загружающие внешние библиотеки DLL, не являются модульными тестами. Вам следует использовать инъекцию зависимостей. Интеграционный / функциональный тест запускает все в целом и загружает зависимости (dll).   -  person Marek R    schedule 12.07.2019
comment
Почему это не модульные тесты? Код, который они тестируют, зависит от OpenCV. В любом случае мне нужно скопировать эти библиотеки DLL в каталог исполняемого файла, независимо от типа теста.   -  person ruipacheco    schedule 12.07.2019


Ответы (2)


Вот что я сделал:

1) Измените генератор проекта Conan на virtualrunenv и установить пакеты, как описано в документации.

2) Запустите приглашение разработчика или выполните сценарий, который он запускает при запуске, из любого окна командной строки.

3) Откройте проект CMake из Visual Studio.

4) Запускаем тесты. Теперь доступны все библиотеки.

person ruipacheco    schedule 19.07.2019

Вы должны успешно найти opencv, чтобы вы могли получить связанные кешированные переменные cmake. Получите пути dll opencv из одной из этих переменных (с помощью сценария в ваших файлах cmake) и запишите его в файл .bat (windows) или .sh (linux / mac). Этот файл сценария оболочки должен временно добавить пути dll к переменной PATH, а затем выполнить свой unittest. Не уверен, что это полагается на Conan, поскольку я никогда не использую это.

person ChrisZZ    schedule 20.07.2019