- 參考http://www.itdecent.cn/p/ab7a94115d10
官網(wǎng)地址:https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html#command:configure_package_config_file
2.<PackageName>Config.cmake.in的模版
@PACKAGE_INIT@
find_package(XXXX REQUIRED)
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@-targets.cmake")
check_required_components("@PROJECT_NAME@")
以上模版會(huì)在使用configure_package_config_file()的時(shí)候創(chuàng)建<PackageName>Config.cmake文件,具體函數(shù)介紹如下:
configure_package_config_file(<input> <output>
INSTALL_DESTINATION <path>
[PATH_VARS <var1> <var2> ... <varN>]
[NO_SET_AND_CHECK_MACRO]
[NO_CHECK_REQUIRED_COMPONENTS_MACRO]
[INSTALL_PREFIX <path>]
)
input:<PackageName>Config.cmake.in文件
output:<PackageName>Config.cmake或者<PackageName>-config.cmake文件
INSTALL_DESTINATION <path>:<PackageName>-config.cmake安裝的位置,可以是絕對(duì),也可以是相對(duì)路徑,如果是相
對(duì)路徑,就會(huì)以來(lái)INSTALL_PREFIX路徑。
[PATH_VARS <var1> <var2> ... <varN>]:將變量<var1> <var2>等,自動(dòng)計(jì)算,替換成install path的相對(duì)路徑
3.生成<PackageName>ConfigVersion.cmake文件
通過(guò)write_basic_package_version_file()函數(shù)可以生成<PackageName>ConfigVersion.cmake文件,
write_basic_package_version_file(<filename>
[VERSION <major.minor.patch>]
COMPATIBILITY <AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion>
[ARCH_INDEPENDENT] )
<filename>:輸出的<PackageName>ConfigVersion.cmake文件
COMPATIBILITY <AnyNewerVersion|SameMajorVersion|SameMinorVersion|ExactVersion>:參數(shù)主要用于find_package的時(shí)候如何匹配版本
AnyNewerVersion-允許查找等于或高于當(dāng)前版本的包(requested_version <= installed_version)
SameMajorVersion-要求主版本號(hào)(X in X.Y.Z)完全一致,次版本號(hào)和小版本號(hào)可更高或相等
SameMinorVersion-要求主版本號(hào)和次版本號(hào)(X.Y in X.Y.Z)完全一致,小版本號(hào)可更高或相等
ExactVersion-必須完全匹配版本號(hào)(包括 X.Y.Z 所有部分)
- install
關(guān)鍵的一些參數(shù)定義:
| 參數(shù)子命令 | 作用與規(guī)則 | 示例 |
|---|---|---|
| TARGETS | 安裝可執(zhí)行文件、庫(kù)等編譯目標(biāo),需指定目標(biāo)類型(RUNTIME、LIBRARY、ARCHIVE)和安裝路徑 | install(TARGETS myapp DESTINATION bin) 將可執(zhí)行文件安裝到 bin 目錄下 |
| FILES | 安裝普通文件(如頭文件、配置文件),不自動(dòng)設(shè)置執(zhí)行權(quán)限 | install(FILES config.txt DESTINATION etc) 將配置文件安裝到 etc 目錄下 |
| PROGRAMS | 安裝腳本或程序文件,自動(dòng)添加執(zhí)行權(quán)限 | install(PROGRAMS setup.sh DESTINATION scripts) 安裝腳本并賦予執(zhí)行權(quán)限 |
| DIRECTORY | 安裝整個(gè)目錄,支持通配符過(guò)濾(PATTERN "*.h")和權(quán)限控制 | install(DIRECTORY include/ DESTINATION include/myproj) 遞歸安裝頭文件目錄 |
| EXPORT | 生成導(dǎo)出配置文件(如 <Package>Config.cmake),供外部項(xiàng)目通過(guò) find_package 調(diào)用 | install(EXPORT mylib-config DESTINATION lib/cmake/mylib) 導(dǎo)出庫(kù)的配置信息 |
| SCRIPT/CODE | 在安裝過(guò)程中執(zhí)行自定義 CMake 腳本或代碼片段 | install(CODE "message("Installing...")") 打印安裝日志 |
| DESTINATION | 指定安裝路徑,支持相對(duì)路徑(基于 CMAKE_INSTALL_PREFIX)或絕對(duì)路徑 | DESTINATION lib 默認(rèn)安裝到 ${CMAKE_INSTALL_PREFIX}/lib |
| PERMISSIONS | 設(shè)置文件權(quán)限(如 OWNER_READ、GROUP_EXECUTE) | install(FILES data.txt DESTINATION share PERMISSIONS OWNER_READ) 設(shè)置文件權(quán)限 |
| COMPONENT | 定義安裝組件,用于分批次安裝或打包(如 runtime、development) | install(TARGETS mylib DESTINATION lib COMPONENT runtime) 將庫(kù)標(biāo)記為運(yùn)行時(shí)組件 |
| CONFIGURATIONS | 指定生效的構(gòu)建配置(如 Release、Debug),僅安裝特定配置下的文件 | install(TARGETS myapp DESTINATION bin CONFIGURATIONS Release) 僅安裝 Release 版本 |
| NAMESPACE | target之前加上namespace | install(EXPORT |
目前的一段例子:
# Install generated *-config.cmake and *-version.cmake files
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/${ara_log_export_name}-config.cmake
${CMAKE_CURRENT_BINARY_DIR}/${ara_log_export_name}-config-version.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${ara_log_export_name})
# Install the actual target(s), i.e. the libraries and executables
install(
TARGETS ${LIBRARY_NAME}
EXPORT ${ara_log_export_name}-targets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
# Install exported targets, i.e. *-targets.cmake
install(
EXPORT ${ara_log_export_name}-targets
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/${ara_log_export_name}
NAMESPACE ara::)