我正在CMake项目中建立2个目标:libA.so和libB.so。 B取决于A(B-> A)。
目标 A 的声明:
file(GLOB SOURCES "*.cpp")
add_library(A SHARED ${SOURCES})
target_include_directories(A PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src/>
$<INSTALL_INTERFACE:src/>)
#
# Installation
set(PACKAGE_NAME A)
set(PACKAGE_VERSION 1.0)
install(TARGETS ${PACKAGE_NAME} EXPORT ${PACKAGE_NAME}Targets
ARCHIVE DESTINATION lib/${PACKAGE_NAME}-${PACKAGE_VERSION}
LIBRARY DESTINATION lib/${PACKAGE_NAME}-${PACKAGE_VERSION}
INCLUDES DESTINATION include/${PACKAGE_NAME}-${PACKAGE_VERSION}
export(EXPORT ${PACKAGE_NAME}Targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGE_NAME}-${PACKAGE_VERSION}/${PACKAGE_NAME}Targets.cmake"
)
目标 B 的声明:
add_library(B SHARED b.cpp)
target_include_directories(B PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<INSTALL_INTERFACE:> )
target_link_libraries(B PUBLIC A)
#
# Installation
install(TARGETS B LIBRARY DESTINATION lib/B-1.0)
现在这在代码库中很好用,B拥有通往A的正确路径:
ldd /home/user/dev/source_code/lib/libB.so
...
libA.so.1.0 => /home/user/dev/source_code/lib/libA.so.1.0 (0x0000007f7fe40000)
...
现在要对系统进行安装:
sudo make install
它们安装到:
/usr/local/lib/A-1.0/libA.so.1.0
/usr/local/lib/B-1.0/libB.so
现在再次测试
ldd /usr/local/lib/B-1.0/libB.so
...
libA.so.1.0 => not found
...
在安装后似乎没有为 B 正确设置RPATH? CMake为什么不找出通往已知目标 A 的正确路径?