I documenti per lo stato di CMake 3.2.2, che è possibile utilizzare le espressioni del generatore per la firma install(<FILES|PROGRAMS> ...)
. Stavo cercando di utilizzare le espressioni del generatore in altre firme di install()
, ma a quanto pare non funziona. Mi piacerebbe fare qualcosa di simile:Espressione generatore per comandi di installazione()
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/$<CONFIG>"
LIBRARY DESTINATION "Lib/$<CONFIG>"
ARCHIVE DESTINATION "Lib/$<CONFIG>"
Ho anche provato a chiamare install()
più volte come questo:
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/Debug" CONFIGURATIONS Debug
LIBRARY DESTINATION "Lib/Debug" CONFIGURATIONS Debug
ARCHIVE DESTINATION "Lib/Debug" CONFIGURATIONS Debug
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/Release" CONFIGURATIONS Release
LIBRARY DESTINATION "Lib/Release" CONFIGURATIONS Release
ARCHIVE DESTINATION "Lib/Release" CONFIGURATIONS Release
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/MinSizeRel" CONFIGURATIONS MinSizeRel
LIBRARY DESTINATION "Lib/MinSizeRel" CONFIGURATIONS MinSizeRel
ARCHIVE DESTINATION "Lib/MinSizeRel" CONFIGURATIONS MinSizeRel
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/RelWithDebInfo" CONFIGURATIONS RelWithDebInfo
LIBRARY DESTINATION "Lib/RelWithDebInfo" CONFIGURATIONS RelWithDebInfo
ARCHIVE DESTINATION "Lib/RelWithDebInfo" CONFIGURATIONS RelWithDebInfo
Questo fa sì che CMake per emettere un errore sulla falsariga di target 'pippo' esportati più di una volta in "fooConfig".
Non riesco a utilizzare CMAKE_BUILD_TYPE
qui senza aggiornare la cache di CMake e rieseguire la compilazione. Piuttosto, voglio utilizzare la funzione di compilazione batch di Visual Studio, che crea per me configurazioni multiple.
C'è stato un piccolo trucco che ho provato anche io. Ho notato che il progetto INSTALL
generato da CMake sta semplicemente richiamando uno script CMake ${CMAKE_BINARY_DIR}/cmake_install.cmake
con l'argomento -DBUILD_TYPE=$(Configuration)
. Così ho provato il seguente:
install(TARGETS foo EXPORT fooConfig
RUNTIME DESTINATION "Bin/\${BUILD_TYPE}"
LIBRARY DESTINATION "Lib/\${BUILD_TYPE}"
ARCHIVE DESTINATION "Lib/\${BUILD_TYPE}"
Questo ha funzionato bene per l'installazione. Tuttavia, lo script di esportazione installato, ovvero l'output di install(EXPORT fooConfig DESTINATION .)
ora tenta anche di utilizzare ${BUILD_TYPE}
, che non è impostato nel momento in cui l'utente include quello script ...
Se qualcuno conosce un altro modo per raggiungere i miei obiettivi, si prega di lasciare conoscermi.
Mi aspettavo di dover fare qualcosa di simile ... È un peccato che CMake non supporti qualcosa del genere. Nel loro sistema di tracciamento dei problemi ho visto che hanno implementato espressioni generatrici per gli argomenti DESTINATION di tutte le firme install() di recente, ma non esiste ancora alcuna versione ufficiale con questa funzionalità. Quindi per gli utenti futuri: le versioni recenti di CMake (> 3.2.2) probabilmente già supportano le espressioni del generatore per altre firme che installano (FILES). – Manuzor