库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下运行的最小侵入性调整是什么?
答案 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
。