Windows和CMake下的共享库:安装前找不到DLL

时间:2019-02-06 18:39:04

标签: windows dll cmake

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 :(得分:1)

在Windows上执行此操作的正确方法是为测试运行填充PATH环境变量:

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

如果path-containing-your-dll是在构建中生成的工件的函数,我相信您可以使用生成器表达式。

最上面的樱桃:从cmake 3.13开始,也可以在目标上设置变量VS_DEBUGGER_ENVIRONMENT,以便在Visual Studio中具有良好的调试行为(例如,能够直接从Visual调试应用程序,而无需经过调试ctest