CMake测试在MacOS上找不到库

时间:2018-08-10 19:17:50

标签: c++ macos cmake dylib

我有一个带有单元测试的简单库。该库可以构建为静态链接库或动态库。该库针对Windows,Linux和MacOS构建。

该库使用CMake(带有Qt)并具有ctest单元测试。

这是构建库和调用单元测试的方式:

Update-Database

除了MacOS之外,一切都正常。当构建库是动态链接库时,单元测试找不到该库。

Development

直接调用ctest或直接调用可执行文件都可以。仅当从cmake调用测试目标时,单元测试可执行文件才找不到该库。

将DYLD_LIBRARY_PATH设置为库的位置无济于事。 我使用install_name_tool将库的路径更改为绝对路径,从而解决了该问题。 但是,这仅是问题的指标,而不是解决方案。

我怀疑cmake在调用测试目标时会更改DYLD_LIBRARY_PATH。这是真的?应该如何工作?

1 个答案:

答案 0 :(得分:0)

  

我怀疑cmake在调用测试目标时会更改DYLD_LIBRARY_PATH。这是真的吗?

实际上,ctest用于执行先前在CMakeLists.txt中描述的测试,而cmakectest都不更新DYLD_LIBRARY_PATH环境变量。

也就是说,如果您想将特定的测试与某些环境变量相关联,可以通过设置ENVIRONMENT测试属性来实现。例如:

set_property(TEST ${name} PROPERTY ENVIRONMENT "DYLD_LIBRARY_PATH=/path/to/foo")

为了更好地解决您的问题,建议您执行以下操作:

  • 指示使用的CMake二进制文件的版本
  • 如果可能,请提供一个小例子,以重现该问题
  • 共享这两个命令的输出:
    • (1)ldd /tmp/build/bin/UnitTest
    • (2)otool -l /tmp/build/bin/UnitTest | grep -A 3 LC_RPATH | grep path

作为旁注,请考虑指定传递给cmake的参数类型,建议使用-DCMAKE_BUILD_TYPE:STRING=Debug而不是-DCMAKE_BUILD_TYPE=Debug