cmake生成可被其他cmake文件find_package()的包
时间: 2023-07-18 09:08:58 浏览: 55
要生成可被其他 CMake 文件中 `find_package()` 命令调用的包,你需要完成以下步骤:
1. 创建一个 `Config.cmake` 文件
在你的包的根目录下创建一个 `Config.cmake` 文件。该文件中包含了你的包的相关信息,例如包的名称、版本号、依赖项等。
2. 为你的包创建一个安装目标
在你的 CMakeLists.txt 文件中添加一个安装目标,该目标将安装你的包和 `Config.cmake` 文件。例如:
```
install(TARGETS MyPackage
EXPORT MyPackageTargets
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
INCLUDES DESTINATION include)
install(EXPORT MyPackageTargets
FILE MyPackageTargets.cmake
NAMESPACE MyPackage::
DESTINATION lib/cmake/MyPackage)
install(FILES MyPackageConfig.cmake
DESTINATION lib/cmake/MyPackage)
```
3. 在你的 `Config.cmake` 文件中导入你的目标
在你的 `Config.cmake` 文件中导入你的目标和依赖项。例如:
```
include(CMakeFindDependencyMacro)
find_dependency(OtherPackage REQUIRED)
add_library(MyPackage::MyPackage SHARED IMPORTED)
set_target_properties(MyPackage::MyPackage PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/include"
IMPORTED_LOCATION "${CMAKE_CURRENT_LIST_DIR}/lib/libMyPackage.so"
IMPORTED_LINK_INTERFACE_LIBRARIES OtherPackage::OtherPackage)
```
4. 安装你的包
运行 `make install` 命令来安装你的包。安装完成后,你的 `Config.cmake` 文件将被安装到 `${CMAKE_INSTALL_PREFIX}/lib/cmake/MyPackage` 目录中。
5. 在其他 CMake 文件中使用 `find_package()` 命令
在其他 CMake 文件中使用 `find_package()` 命令来查找你的包。例如:
```
find_package(MyPackage REQUIRED)
add_executable(MyApp main.cpp)
target_link_libraries(MyApp MyPackage::MyPackage)
```