使用cmake生成target.cmake文件以供其他cmake文件find_package(),其中引用的库文件和头文件路径,能够根据install位置自行生成,举个例子
时间: 2024-02-02 15:06:37 浏览: 21
好的,这里是一个示例CMakeLists.txt文件,用于生成target.cmake文件以供其他CMake文件使用find_package():
```
cmake_minimum_required(VERSION 3.0)
project(myproject)
# 添加可执行文件
add_executable(myexe main.cpp)
# 添加库文件
add_library(mylib SHARED mylib.cpp)
# 链接库文件
target_link_libraries(myexe mylib)
# 安装规则
install(TARGETS myexe DESTINATION bin)
install(TARGETS mylib DESTINATION lib)
install(FILES mylib.h DESTINATION include)
install(EXPORT myproject-targets DESTINATION lib/cmake/myproject)
# 生成配置文件
include(CMakePackageConfigHelpers)
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/myprojectConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/myprojectConfig.cmake
INSTALL_DESTINATION lib/cmake/myproject
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/myprojectConfigVersion.cmake
VERSION 1.0.0
COMPATIBILITY AnyNewerVersion
)
# 安装配置文件和版本文件
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/myprojectConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/myprojectConfigVersion.cmake
DESTINATION lib/cmake/myproject
)
```
在上面的示例中,我们添加了一个安装规则,将myexe和mylib安装到bin和lib目录中,将mylib.h安装到include目录中。我们还使用install(EXPORT)命令将我们的目标文件myexe和mylib导出到myproject-targets文件中,并安装到lib/cmake/myproject目录中,以便其他CMake项目可以使用find_package()命令找到它们。
为了生成配置文件和版本文件,我们使用了CMakePackageConfigHelpers模块中的configure_package_config_file()和write_basic_package_version_file()函数。这些函数将生成一个myprojectConfig.cmake文件和一个myprojectConfigVersion.cmake文件,它们包含了我们的库文件和头文件的路径信息。我们还使用install()命令将这些配置文件安装到lib/cmake/myproject目录中。
最后,我们可以在其他CMake项目中使用find_package()命令来查找我们的myproject库,并自动使用正确的库文件和头文件路径:
```
find_package(myproject REQUIRED)
include_directories(${myproject_INCLUDE_DIRS})
add_executable(myapp main.cpp)
target_link_libraries(myapp ${myproject_LIBRARIES})
```