4 votes

Comment changer le nom du fichier du paquet CPack en fonction de la configuration ?

Dans CMake, en utilisant CPack, je veux CPACK_PACKAGE_FILE_NAME d'inclure -debug dans le cas où le paquet est produit à partir de la configuration Debug. Pour les générateurs CMake à configuration unique, ceci est probablement réalisable en vérifiant les paramètres suivants CMAKE_BUILD_TYPE mais cela ne fonctionne pas pour les générateurs de multi-configuration comme Visual Studio.

0voto

user2672125 Points 11

J'ai réussi à traverser le add_custom_target + expression generator + standalone cmake script for the cpack :

CMakeLists.txt

...

set(CPACK_PACKAGE_VERSION "1.0.0.0")
set(CPACK_MONOLITHIC_INSTALL 1)
set(CPACK_OUTPUT_CONFIG_FILE "${CMAKE_BINARY_DIR}/BundleConfig.cmake")

include(CPack)

set(CPACK_BUNDLE_TEMPLATE_CONFIG_FILE "${CMAKE_BINARY_DIR}/CPackConfig.cmake.in")
set(CPACK_BUNDLE_OUTPUT_CONFIG_FILE "${CMAKE_BINARY_DIR}/CPackProperties.cmake")

# make cpack configuration template for later replacements with the expression generator support
file(WRITE "${CPACK_BUNDLE_TEMPLATE_CONFIG_FILE}" "")
file(APPEND "${CPACK_BUNDLE_TEMPLATE_CONFIG_FILE}" "set(CPACK_PACKAGE_FILE_NAME \"\${CPACK_PACKAGE_FILE_NAME}\")\n")

add_custom_target(bundle
  COMMAND ${CMAKE_COMMAND}
    # this one must be written as is, DO NOT put the `$<CONFIGURATION>` inside a variable!
    -D "CPACK_PACKAGE_FILE_NAME=${PROJECT_NAME}-${CPACK_PACKAGE_VERSION}-win32-$<CONFIGURATION>"
    -D "CPACK_BUNDLE_TEMPLATE_CONFIG_FILE=${CPACK_BUNDLE_TEMPLATE_CONFIG_FILE}"
    -D "CPACK_BUNDLE_OUTPUT_CONFIG_FILE=${CPACK_BUNDLE_OUTPUT_CONFIG_FILE}"
    # this one must be after all `-D`s
    -P "${CMAKE_CURRENT_LIST_DIR}/CPackMakeConfig.cmake"
  COMMAND "${CMAKE_CPACK_COMMAND}" 
    "-G" "NSIS"
    "-C" "$<CONFIGURATION>"
    "--config" "${CPACK_OUTPUT_CONFIG_FILE}")

CPackMakeConfig.cmake

if (NOT CPACK_BUNDLE_TEMPLATE_CONFIG_FILE)
  message(FATAL_ERROR "* CPACK_BUNDLE_TEMPLATE_CONFIG_FILE variable must be defined!")
endif()
if (NOT CPACK_BUNDLE_OUTPUT_CONFIG_FILE)
  message(FATAL_ERROR "* CPACK_BUNDLE_OUTPUT_CONFIG_FILE variable must be defined!")
endif()

CONFIGURE_FILE("${CPACK_BUNDLE_TEMPLATE_CONFIG_FILE}" "${CPACK_BUNDLE_OUTPUT_CONFIG_FILE}")

Parce que le cpack inclut automatiquement le CPackProperties.cmake script à la fin de la configuration script. BundleConfig.cmake alors il vous suffit d'écrire les vraies valeurs dans le fichier à l'étape de la construction de cmake ( BUNDLE ) avant la cpack exécution.

cmake --build . --config Debug --target BUNDLE

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X