Cpack + NSIS - 不使用自定义 NSIS 配置模板

问题描述 投票:0回答:1

我是 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 变量内添加该自定义模板的路径,如论坛上所示。

c++ cmake nsis cpack
1个回答
0
投票

正如问题评论中所述,在调用 CPack 之后,我已将 NSIS 模板放入 CMAKE_MODULE_PATH 中。由于 CPack 在包含 CMAKE_MODULE_PATH 时会检查它,因此它会检查我尚未触及的变量中的模板。有道理。

谢谢@drescherjm

© www.soinside.com 2019 - 2024. All rights reserved.