CMake 的导出如何知道目标是啥版本?
Posted
技术标签:
【中文标题】CMake 的导出如何知道目标是啥版本?【英文标题】:How does CMake's export know what version the target is?CMake 的导出如何知道目标是什么版本? 【发布时间】:2018-08-06 01:22:42 【问题描述】:我正在尝试创建一个库。我的 CMakeLists.txt 看起来像这样:
add_library(Lib STATIC)
set_target_properties(Lib PROPERTIES
VERSION 0.1)
export(TARGETS Lib
FILE $BIN_DIR/LibConfig.cmake)
当外部项目使用此库时,CMake 会显示错误:
CMake Error at CMakeLists.txt:10 (find_package):
Could not find a configuration file for package "Lib" that is
compatible with requested version "0.1".
The following configuration files were considered but not accepted:
some directory/Lib/bin/LibConfig.cmake, version: unknown
查看生成的LibConfig.cmake,除了没有携带版本信息,没有任何问题。
【问题讨论】:
你的 CMake 版本是什么? @StanleyF。我的 CMake 版本是 3.11.2,但我使用的是cmake_minimum_required(VERSION 3.5)
【参考方案1】:
要让 CMake 确定您的库的版本,您需要创建一个 LibConfigVersion.cmake
文件。
可以在 CMake 文档中找到一个示例:generating package files
对于您的库,结果如下:
add_library(Lib STATIC)
set_target_properties(Lib PROPERTIES VERSION 0.1)
export(TARGETS LibFILE $BIN_DIR/LibConfig.cmake)
include(CMakePackageConfigHelpers)
write_basic_package_version_file($BIN_DIR/LibConfigVersion.cmake
VERSION 0.1
COMPATIBILITY SameMajorVersion)
您可以在project
命令中设置一次,而不是多次提供版本信息:
project(Lib VERSION 0.1)
【讨论】:
以上是关于CMake 的导出如何知道目标是啥版本?的主要内容,如果未能解决你的问题,请参考以下文章
控制共享库的导出符号时,与“gcc -fvisibility=hidden”等效的 CMake 是啥?