CPack NSIS组件未指定

时间:2017-02-01 16:42:15

标签: c++ cmake nsis cpack

看看以下相当简单的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;
}

因此,如果我nmake package在Windows上出现这种情况,则出于某种原因将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 个答案:

答案 0 :(得分:1)

根据install命令的文档,文件类型的每个规范(例如 RUNTIME LIBRARY PUBLIC_HEADER 启动自己的安装子句,其中应用了所有其他选项。

即,选项COMPONENT sdk 应用于文件类型PUBLIC_HEADER

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