Как переименовать/пересмотреть целевой файл с номером версии при установке в CMake?

Я использую 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».


person Leon    schedule 16.07.2019    source источник


Ответы (2)


Вы ищете свойство 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 . )
person kanstar    schedule 16.07.2019
comment
OUTPUT_NAME имеет ограниченное использование: вы не можете использовать его для указания того же имени, что и другая цель, иначе MSVC сборка завершится ошибкой. MSVC создает ${OUTPUT_NAME}.lib для каждой цели и может конфликтовать. - person puchu; 08.04.2021

Я получил это, изменив коды следующим образом:

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 . )
person Leon    schedule 16.07.2019