我有一个带有单元测试的简单库。该库可以构建为静态链接库或动态库。该库针对Windows,Linux和MacOS构建。
该库使用CMake(带有Qt)并具有ctest单元测试。
这是构建库和调用单元测试的方式:
Update-Database
除了MacOS之外,一切都正常。当构建库是动态链接库时,单元测试找不到该库。
Development
直接调用ctest或直接调用可执行文件都可以。仅当从cmake调用测试目标时,单元测试可执行文件才找不到该库。
将DYLD_LIBRARY_PATH设置为库的位置无济于事。 我使用install_name_tool将库的路径更改为绝对路径,从而解决了该问题。 但是,这仅是问题的指标,而不是解决方案。
我怀疑cmake在调用测试目标时会更改DYLD_LIBRARY_PATH。这是真的?应该如何工作?
答案 0 :(得分:0)
我怀疑cmake在调用测试目标时会更改DYLD_LIBRARY_PATH。这是真的吗?
实际上,ctest用于执行先前在CMakeLists.txt
中描述的测试,而cmake
或ctest
都不更新DYLD_LIBRARY_PATH
环境变量。
也就是说,如果您想将特定的测试与某些环境变量相关联,可以通过设置ENVIRONMENT测试属性来实现。例如:
set_property(TEST ${name} PROPERTY ENVIRONMENT "DYLD_LIBRARY_PATH=/path/to/foo")
为了更好地解决您的问题,建议您执行以下操作:
ldd /tmp/build/bin/UnitTest
otool -l /tmp/build/bin/UnitTest | grep -A 3 LC_RPATH | grep path
作为旁注,请考虑指定传递给cmake的参数类型,建议使用-DCMAKE_BUILD_TYPE:STRING=Debug
而不是-DCMAKE_BUILD_TYPE=Debug
。