我是 CPack,要为软件构建包,我想使用自定义模板(NSIS.template.in 来替换 CPack 的默认模板)。 Cpack 仍然没有使用我的模板。我正在使用 Clion 捆绑的 cmake(版本 3.25.2)。这是我的 CMakeList.txt。虽然还不漂亮,但总会来的。
cmake_minimum_required(VERSION 3.25)
project(prigo_parcours VERSION 0.1.1)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt6 REQUIRED COMPONENTS
Core
Gui
Widgets
)
add_subdirectory(OpenXLSX)
include_directories(src/)
add_executable(prigo_parcours resources/resources.qrc main.cpp forms/cursusgen.cpp forms/cursusgen.h forms/cursusgen.ui forms/yearform.cpp forms/yearform.h forms/yearform.ui src/parcours.h src/excelio.cpp src/excelio.h forms/appsettings.cpp forms/appsettings.h forms/appsettings.ui)
if(CMAKE_BUILD_TYPE STREQUAL "Release")
set_property(TARGET prigo_parcours PROPERTY WIN32_EXECUTABLE true)
message("BUILDING AS RELEASE")
endif()
target_link_libraries(prigo_parcours
PRIVATE
Qt::Core
Qt::Gui
Qt::Widgets
OpenXLSX::OpenXLSX
)
if (WIN32 AND NOT DEFINED CMAKE_TOOLCHAIN_FILE)
set(DEBUG_SUFFIX)
if (MSVC AND CMAKE_BUILD_TYPE MATCHES "Debug")
set(DEBUG_SUFFIX "d")
endif ()
set(QT_INSTALL_PATH "${CMAKE_PREFIX_PATH}")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
if (NOT EXISTS "${QT_INSTALL_PATH}/bin")
set(QT_INSTALL_PATH "${QT_INSTALL_PATH}/..")
endif ()
endif ()
if (EXISTS "${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/plugins/platforms/qwindows${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>/plugins/platforms/")
endif ()
foreach (QT_LIB Core Gui Widgets)
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy
"${QT_INSTALL_PATH}/bin/Qt6${QT_LIB}${DEBUG_SUFFIX}.dll"
"$<TARGET_FILE_DIR:${PROJECT_NAME}>")
endforeach (QT_LIB)
endif ()
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/data/formulas-update.vbs DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/data/)
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/data/template.xlsx DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/data/)
install(TARGETS prigo_parcours
BUNDLE DESTINATION .
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
qt_generate_deploy_app_script(
TARGET prigo_parcours
OUTPUT_SCRIPT deploy_script
NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})
install(FILES data/formulas-update.vbs data/template.xlsx data/prigo.ini DESTINATION bin/data/)
include(CPack)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR};${CMAKE_MODULE_PATH}")
message(NOTICE "${CMAKE_MODULE_PATH}")
set(CPACK_PACKAGE_NAME "prigo-parcours")
set(APP_ICON ${CMAKE_CURRENT_SOURCE_DIR}/resources/HELB_ICON.ico)
set(APP_ICON_UNI ${CMAKE_CURRENT_SOURCE_DIR}/resources/HELB_ICON_UNI.ico)
configure_file ("${PROJECT_SOURCE_DIR}/package-options.cmake.in"
"${PROJECT_BINARY_DIR}/package-options.cmake"
@ONLY)
set(CPACK_PROJECT_CONFIG_FILE "${PROJECT_BINARY_DIR}/package-options.cmake")
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
message(NOTICE "BUILDING AS DEBUG")
endif()
add_custom_target(prigo_parcours_package COMMAND ${CMAKE_CPACK_COMMAND} -C $<CONFIGURATION> --config ${CMAKE_CURRENT_BINARY_DIR}/package-options.cmake DEPENDS prigo_parcours)
message(NOTICE ${PROJECT_VERSION})
也是 CPack 的配置输入文件
include(CPackConfig.cmake)
set(CPACK_PACKAGE_NAME @CPACK_PACKAGE_NAME@)
set(CPACK_PACKAGE_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
set(CPACK_PACKAGE_VERSION_MAJOR @CMAKE_PROJECT_VERSION_MAJOR@)
set(CPACK_PACKAGE_VERSION_MINOR @CMAKE_PROJECT_VERSION_MINOR@)
set(CPACK_PACKAGE_VERSION_PATCH @CMAKE_PROJECT_VERSION_PATCH@)
set(CPACK_PACKAGE_VERSION @CMAKE_PROJECT_VERSION@)
#set(CPACK_PACKAGE_ICON @APP_ICON@)
set(CPACK_NSIS_MUI_ICON @APP_ICON@)
set(CPACK_NSIS_MUI_UNIICON @APP_ICON_UNI@)
set(CPACK_NSIS_INSTALL_ROOT "'$LocalAppData'")
set(CPACK_NSIS_CREATE_ICONS_EXTRA
"CreateShortCut '$LocalAppData\\\\$STARTMENU_FOLDER\\\\Prigo Parcours.lnk' '$INSTDIR\\\\bin\\\\prigo_parcours.exe'"
)
set(CPACK_NSIS_DELETE_ICONS_EXTRA
"Delete '$LocalAppData\\\\$START_MENU\\\\Prigo Parcours.lnk'"
)
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-Win-${CPACK_PACKAGE_ARCHITECTURE}-@CMAKE_BUILD_TYPE@)
有什么想法吗?
我尝试在 CMAKE_MODULE_PATH 变量内添加该自定义模板的路径,如论坛上所示。
正如问题评论中所述,在调用 CPack 之后,我已将 NSIS 模板放入 CMAKE_MODULE_PATH 中。由于 CPack 在包含 CMAKE_MODULE_PATH 时会检查它,因此它会检查我尚未触及的变量中的模板。有道理。
谢谢@drescherjm