如何在 CMake 中安装时使用版本号重命名/修改目标文件?
Posted
技术标签:
【中文标题】如何在 CMake 中安装时使用版本号重命名/修改目标文件?【英文标题】:How to rename/revise target file with version number on installing in CMake? 【发布时间】:2019-11-25 02:34:39 【问题描述】:我正在使用 CMake-3.13.4 和 KDevelop-5.2.1。
我有一个最顶层的 CMakeLists.txt,它定义了我的目标的版本号。 它看起来像:
set( PROJECT_VERSION_MAJOR 1 )
set( PROJECT_VERSION_MINOR 4 )
set( PROJECT_VERSION_PATCH 7 )
...
add_executable( mytarget main.cpp XXX.cpp ... )
target_link_libraries( mytarget "stdc++fs" $CMAKE_THREAD_LIBS_INIT ... )
install( TARGETS mytarget RUNTIME DESTINATION . )
我希望 CMake 自动将版本字符串附加到目标的文件名。所以我编码如下:
install( TARGETS mytarget RUNTIME DESTINATION . RENAME "mytarget-$PROJECT_VERSION_MAJOR.$PROJECT_VERSION_MINOR.$PROJECT_VERSION_PATCH" )
但它不起作用。
有没有办法用 CMake 完成? 我最终想要的文件名是“mytarget-1.4.7”。
【问题讨论】:
【参考方案1】:您正在寻找房产OUTPUT_NAME
。
add_executable( mytarget main.cpp XXX.cpp ... )
target_link_libraries( mytarget "stdc++fs" $CMAKE_THREAD_LIBS_INIT ... )
set_target_properties( mytarget PROPERTIES OUTPUT_NAME "mytarget-$PROJECT_VERSION_MAJOR.$PROJECT_VERSION_MINOR.$PROJECT_VERSION_PATCH" )
install( TARGETS mytarget RUNTIME DESTINATION . )
【讨论】:
OUTPUT_NAME
的用途有限:您不能使用它来指定与另一个目标相同的名称,否则MSVC
构建失败。 MSVC
为每个目标创建$OUTPUT_NAME.lib
,它可能会发生冲突。【参考方案2】:
我通过如下修改代码得到它:
add_executable( mytarget-$PROJECT_VERSION_MAJOR.$PROJECT_VERSION_MINOR.$PROJECT_VERSION_PATCH
main.cpp XXX.cpp ... )
target_link_libraries( mytarget-$PROJECT_VERSION_MAJOR.$PROJECT_VERSION_MINOR.$PROJECT_VERSION_PATCH "stdc++fs" $CMAKE_THREAD_LIBS_INIT ... )
install( TARGETS mytarget-$PROJECT_VERSION_MAJOR.$PROJECT_VERSION_MINOR.$PROJECT_VERSION_PATCH RUNTIME DESTINATION . )
【讨论】:
以上是关于如何在 CMake 中安装时使用版本号重命名/修改目标文件?的主要内容,如果未能解决你的问题,请参考以下文章
在其他 iPhone 中安装时,iPhone 中的应用程序安装失败