使用 cmake 链接用于测试的运行时库
Linking runtime library for test with cmake
有没有什么简单的方法可以在运行时 link 使用 CMAKE 测试本地构建的库?
例如:
enable_testing()
add_executable(Test test/Test.cpp)
target_link_libraries(Test -L../lib/libzmq/build/lib/ zmq)
add_test(
NAME TestClientZmq
COMMAND "LD_PRELOAD=../lib/libzmq/build/lib/libzmq.so Test")
运行 测试会在运行时抱怨缺少库:
error while loading shared libraries: libzmq.so.4.2.0: cannot open shared object file: No such file or directory
我可以:
- 当运行 ctest
时设置LD_PRELOAD
- 编写一个包装脚本来执行此操作,然后调用可执行文件(我目前拥有的)
虽然我更愿意在 cmake 中做所有事情,因为我认为最好将所有这些配置保存在一个地方以避免将来出现错误。
添加
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
给你的CMakeLists.txt
。如本 wiki article.
中所述
构建后,使用以下命令确保 RPATH 设置正确:
objdump -x Test | grep RPATH
有没有什么简单的方法可以在运行时 link 使用 CMAKE 测试本地构建的库?
例如:
enable_testing()
add_executable(Test test/Test.cpp)
target_link_libraries(Test -L../lib/libzmq/build/lib/ zmq)
add_test(
NAME TestClientZmq
COMMAND "LD_PRELOAD=../lib/libzmq/build/lib/libzmq.so Test")
运行 测试会在运行时抱怨缺少库:
error while loading shared libraries: libzmq.so.4.2.0: cannot open shared object file: No such file or directory
我可以:
- 当运行 ctest 时设置
- 编写一个包装脚本来执行此操作,然后调用可执行文件(我目前拥有的)
LD_PRELOAD
虽然我更愿意在 cmake 中做所有事情,因为我认为最好将所有这些配置保存在一个地方以避免将来出现错误。
添加
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
给你的CMakeLists.txt
。如本 wiki article.
构建后,使用以下命令确保 RPATH 设置正确:
objdump -x Test | grep RPATH