如何在CMake中安装时重命名/修改目标文件的版本号?

svmlkihl  于 5个月前  发布在  其他
关注(0)|答案(3)|浏览(68)

我使用的是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”。

pod7payv

pod7payv1#

您正在寻找的财产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 . )

字符串

hc2pp10m

hc2pp10m2#

我通过修改代码得到它如下:

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 . )

字符串

ghg1uchk

ghg1uchk3#

为了生成一个自定义名称的安装目标,我让CMake在安装过程中运行自定义代码。自定义代码只是调用file(COPY ...)-在我的例子中,为了将libcalf.so安装为calf.so

install(
    CODE "file(COPY $<TARGET_FILE:calf>/ DESTINATION ${CMAKE_INSTALL_PREFIX}/lib/lv2/${PROJECT_NAME}.lv2/calf.so)"
)

字符串
在你的例子中,我猜等价的答案是

install(
    CODE "file(COPY $<TARGET_FILE:mytarget>/ DESTINATION ./mytarget-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH})"
)

相关问题