CMake的ctest:找不到图像(可能是rpath问题)

时间:2017-07-10 17:41:49

标签: c++ macos unix build cmake

CMake项目在Linux和Windows上构建并运行测试,但在macOS上运行测试程序失败。

dyld: Library not loaded: libfoo.dylib
  Referenced from: /some/path/test_foo
  Reason: image not found

我可以验证libfoo.dylib与测试程序test_foo位于同一个目录中。正常运行./test_foo

CMake通过test_foo(位于另一条路径)致电ctestctest的调用似乎是失败的原因,但如果我尝试这样的命令(工作目录为/some/path),它可以工作:

DYLD_LIBRARY_PATH=`pwd` /another/path/ctest

我认为使用add_testctest运行测试而不设置DYLD_LIBRARY_PATH是可能的,因为我可以成功运行test_foo,但我没有运气。

以下是CMakeLists.txt

的当前相关内容
set(TEST_LIBS foo)
set(TEST_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tests)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})

add_executable(test_foo tests/testfoo.cpp)

set_target_properties(test_foo PROPERTIES COMPILE_FLAGS "-DSELF_TEST")
target_link_libraries(test_foo ${TEST_LIBS} ${STUFF})
add_dependencies(build_tests test_foo)

add_test(NAME test_foo COMMAND $<TARGET_FILE:test_foo>
        WORKING_DIRECTORY ${TEST_DIR})
  • 我已尝试在这些行之前设置/取消设置CMAKE_MACOSX_RPATHMACOSX_RPATH,如建议here
  • 我已尝试在行之后添加以下代码段,如建议的here

     IF(APPLE)
         SET(CMAKE_INSTALL_NAME_DIR ${TEST_DIR})
         SET(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
     ENDIF(APPLE)
    
  • 我没有尝试using install,我不知道如何为我的项目配置它甚至是它的功能。

这里有任何已知的方法或任何明显的错误吗? install值得关注吗?我希望能够从Makefile中的CMake生成的ctest行运行测试。

CMake 3.5.2,macOS 10.12.5

1 个答案:

答案 0 :(得分:0)

通过注释解决,感谢@Tsyvarev

指出问题原因的原始注释:

I can verify that 'libfoo.dylib' is in the same dir as the test program 'test_foo'.-真的吗?您的可执行文件在二进制树下创建,您那里有库吗?如果是这样,为什么当它指向源树(tests子目录)时,为什么将TEST_DIR用作工作目录或RPATH?