CPack NSIS 组件未指定

Posted

技术标签:

【中文标题】CPack NSIS 组件未指定【英文标题】:CPack NSIS component is Unspecified 【发布时间】:2017-02-01 16:42:14 【问题描述】:

请看以下相当简单的 CMake 文件:

cmake_minimum_required(VERSION 3.7)

add_library(libdice SHARED lib.cpp)

set_target_properties(libdice PROPERTIES
    PREFIX ""
    OUTPUT_NAME "Dice"
    PUBLIC_HEADER "lib.h"
)

install(TARGETS libdice
    RUNTIME DESTINATION "lib"
    LIBRARY DESTINATION "lib"
    PUBLIC_HEADER DESTINATION "include"
    COMPONENT sdk
)

set(CPACK_PACKAGE_NAME "Dice SDK")
set(CPACK_GENERATOR "NSIS")

include(CPack)

cpack_add_component(sdk)

有了这个lib.h

#pragma once

int sides_of_a_dice();

还有lib.cpp:

int sides_of_a_dice()

    return 6;

因此,如果我在 Windows 上为此 nmake package,它出于某种原因将 Dice.dll 放入 Unspecified 组件中,即使该组件已明确指定。更奇怪的是,公共标头 (lib.h) 正确地进入了 sdk 组件。

CPack: Create package using NSIS
CPack: Install projects
CPack: - Run preinstall target for: Project
CPack: - Install project: Project
CPack: -   Install component: Unspecified   <- Why??!
CPack: -   Install component: sdk
CPack: Create package

发生了什么事?

【问题讨论】:

【参考方案1】:

根据install 命令的文档,每个规范文件类型(如 RUNTIMELIBRARYPUBLIC_HEADER em>) 开始自己的安装子句,所有其他选项都适用于该子句。

也就是说,选项COMPONENT sdk应用于文件类型PUBLIC_HEADER

其他文件(RUNTIMELIBRARY)有组件选项未指定

【讨论】:

以上是关于CPack NSIS 组件未指定的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 CPACK_NSIS_WELCOME_TITLE 和 CPACK_NSIS_FINISH_TITLE?

带有 CPack 的应用程序符号

CPack:如何执行多个 CPACK_NSIS_EXTRA_INSTALL_COMMANDS?

如何通过 CMake/CPack 在 NSIS 中设置向导图像?

使用 CPACK 自定义 NSIS 安装程序

向 cpack 添加额外的命令 - NSIS 打包程序/安装程序