我有一个库A
,该库是使用CMake构建和安装的。对于其安装,它将共享库和头文件放入安装目录。其CMakeLists.txt如下所示:
add_library(A SHARED {A_SRC})
set_target_properties(
A PROPERTIES
OUTPUT_NAME a
PUBLIC_HEADER "${A_HEADERS_SRC}"
)
install(
TARGETS A
EXPORT A
LIBRARY DESTINATION lib
)
install(
EXPORT A
DESTINATION cmake
FILE A-config.cmake
)
install(
FILES ${A_HEADERS_SRC}
DESTINATION include/a
)
这会在make install
上生成如下文件结构:
dist
├─ lib
│ └─ liba.so
├─ include
│ └─ a
│ └─ a.h
└─ cmake
└─ A-config.cmake
另一个CMake项目B
现在使用导入该库
list(APPEND CMAKE_PREFIX_PATH "/path/to/a/dist/cmake")
find_package(A REQUIRED)
add_executable(B ${B_SRC})
target_link_libraries(B PRIVATE A)
有了它,它就可以访问目标A
,并可以建立指向它的可执行链接。
是否有办法获取复制的标头(dist/include/a
目录)的路径,或使CMake将其写入生成的A-config.cmake
文件中?
如果可能的话,我想避免自己写一个A-config.cmake
文件,并保持代码尽可能简单。