Общая библиотека под Windows и CMake: DLL не найдена перед установкой - PullRequest
0 голосов
/ 06 февраля 2019

Библиотека mylib состоит из самой библиотеки в каталоге lib/ и набора тестов в каталоге test/.Он полностью находится под контролем CMake:

mylib/CMakeLists.txt:
...
add_subdirectory(lib)
add_subdirectory(test)
...


mylib/lib/CMakeLists.txt:
...
add_library(my_lib ${src_files})
...


mylib/test/CMakeLists.txt:
...
add_executable(mytest mytest.c)
target_link_libraries(mytest mylib)

Шаги сборки:

mkdir build
cd build
cmake ..
make
ctest         # or make test
make install

Работает под Linux, стабильно на протяжении многих лет.Однако в Windows10 появляется окно с сообщением «mytest.exe - Системная ошибка»: «Выполнение кода не может быть продолжено, поскольку mylib.dll не был найден. Повторная установка программы может решить эту проблему.»

Нетустановка (а не переустановка) не будет хорошим решением: мне нужно сначала протестировать библиотеку перед ее установкой (кстати: это исключает большинство решений, предложенных в ответ на несколько похожих вопросов).

НеCMake должен работать кроссплатформенный?Что такое минимально инвазивная настройка, чтобы вышеуказанные шаги сборки работали под Windows?

1 Ответ

0 голосов
/ 06 февраля 2019

Правильный способ сделать это в Windows - это заполнить переменную окружения PATH для тестового прогона:

set_tests_properties(your_test_name
  PROPERTIES
      ENVIRONMENT PATH="path-containing-your-dll")

Я считаю, что вы можете использовать выражение генератора, если path-containing-your-dll является функциейартефакт, который вы генерируете в своей сборке.

Cherry on top: начиная с cmake 3.13, переменная VS_DEBUGGER_ENVIRONMENT также может быть установлена ​​на цели для обеспечения хорошего поведения отладки внутри Visual Studio (например, возможность отладкиприложение напрямую из Visual вместо ctest).

...