在 CMake 中,使用 CPack 我想CPACK_PACKAGE_FILE_NAME包含-debug后缀,以防包是从调试配置生成的。对于单配置 CMake 生成器,这可能可以通过检查来实现CMAKE_BUILD_TYPE,但这不适用于 Visual Studio 等多配置生成器。
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}")
Run Code Online (Sandbox Code Playgroud)
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}")
Run Code Online (Sandbox Code Playgroud)
因为配置脚本的末尾cpack会自动包含该脚本,所以您只需在执行之前的 cmake 构建阶段(目标)将实际值写入其中即可。CPackProperties.cmakeBundleConfig.cmakeBUNDLEcpack
cmake --build . --config Debug --target BUNDLE
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3532 次 |
| 最近记录: |