使用cmake写一个可被其他cmake文件find_package()调用的包,不自己写.cmake.in文件
时间: 2023-07-18 11:08:57 浏览: 131
如果你不想自己写 `MyPackageConfig.cmake.in` 文件,可以使用 CMake 自带的 `configure_package_config_file()` 函数,它会自动生成配置文件。
下面是一个示例 `CMakeLists.txt` 文件,其中使用了 `configure_package_config_file()` 函数:
```cmake
cmake_minimum_required(VERSION 3.5)
project(MyPackage VERSION 1.0.0 LANGUAGES CXX)
# 设置包的安装路径
if(NOT CMAKE_INSTALL_PREFIX)
set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "Install path prefix" FORCE)
endif()
# 添加头文件路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
# 添加源码路径
add_subdirectory(src)
# 安装包的头文件
install(
DIRECTORY
"${CMAKE_CURRENT_SOURCE_DIR}/include/"
DESTINATION include
)
# 导出包的编译目标
install(
EXPORT MyPackageTargets
FILE MyPackageTargets.cmake
NAMESPACE MyPackage::
DESTINATION lib/cmake/MyPackage
)
# 自动生成包的配置文件
include(CMakePackageConfigHelpers)
write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/MyPackageConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion)
configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/MyPackageConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/MyPackageConfig.cmake"
INSTALL_DESTINATION lib/cmake/MyPackage
)
# 安装包的配置文件和版本文件
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/MyPackageConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/MyPackageConfigVersion.cmake"
DESTINATION lib/cmake/MyPackage
)
```
在这个示例中,使用了 `write_basic_package_version_file()` 函数来生成版本文件,使用了 `configure_package_config_file()` 函数自动生成配置文件。注意,这里的 `MyPackageConfig.cmake.in` 文件只需要包含一些变量定义,不需要包含任何逻辑。
使用这种方法创建的包的使用方式与上一个回答中的方法相同,可以使用 `find_package()` 函数来调用该包。
阅读全文