2017-05-24 31 views
3

CMakeでは、CPackを使用して、-debugサフィックスを含めると、CPACK_PACKAGE_FILE_NAMEには、パッケージがデバッグ構成から生成される場合に対応します。単一構成のCMakeジェネレータの場合、これはおそらくCMAKE_BUILD_TYPEをチェックすることで可能ですが、Visual Studioなどのマルチコンフィギュレーションジェネレータでは機能しません。設定に基づいてCPackパッケージファイル名を変更するにはどうすればよいですか?

答えて

0

私はadd_custom_target + expression generator + standalone cmake script for the cpackを通してそれを作っています

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}") 

CPackMakeConfig.cmake

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}") 

INCLUD自動的cpackので、コンフィグレーションスクリプトBundleConfig.cmakeの最後にCPackProperties.cmakeスクリプトがある場合は、cpack実行前にcmakeビルドステージ(BUNDLEターゲット)に実際の値を書き込むだけで済みます。

cmake --build . --config Debug --target BUNDLE 
関連する問題