我正在使用 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”。
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 . )
我通过修改代码得到它如下:
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 在安装过程中运行自定义代码。自定义代码只是调用
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})"
)