我正在尝试将 CMAKE 设置为构建系统,所以我对它还很陌生。在发布这个问题之前已经做了相当多的广泛研究,但我找不到答案。我过去一天一直在寻找,一些链接是这里,和这里,以及在官方文档中,但我不明白我做错了什么。
问题:我正在尝试使用cmake构建动态库,但版本未设置。
这是我的文件夹结构,使用“tree”命令生成。 (我已经从构建目录中取出了一些内容,因此很容易阅读)
.
├── build
├── CMakeLists.txt
├── test_utility.cpp
└── test_utility.h
这是我的CMakeLists.txt:
cmake_minimum_required(VERSION 3.13)
project(TestLib
VERSION 0.1
DESCRIPTION "Testing the library target utility in Cmake"
LANGUAGES CXX)
add_library (test_utility SHARED test_utility.cpp test_utility.h)
然后我进入构建目录并运行 cmake .. -G "Unix Makefiles" 和 cmake --build . 。一切都顺利完成,除了一件事: 结果是 libtest_utility.so 而我想要 libtest_utility.so.0.1 然后我会自己做符号链接。
我从here知道了解决方案,告诉使用VERSION_MAJOR0和VERSION_MINOR1,但我认为项目中的版本属性应该处理它。
问题:为什么没有设置版本
项目的版本由project()
的
VERSION参数设置,仅表示项目的版本,而不表示其生成的库的版本。
对于设置库的版本,需要设置库的VERSIONpropertytarget:
set_target_properties(test_utility PROPERTIES VERSION "0.1")
如果设置了项目的版本,则可以将该值重新用于构建的目标。只需阅读项目版本而不是重复值
设置项目的版本:
project(TestLib
VERSION 0.1
DESCRIPTION "Testing the library target utility in Cmake"
LANGUAGES CXX
)
使用
PROJECT_VERSION
的值
add_library (test_utility SHARED test_utility.cpp test_utility.h)
set_target_properties(test_utility PROPERTIES VERSION ${PROJECT_VERSION})