看看以下相当简单的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
发生了什么事?
答案 0 :(得分:1)
根据install命令的文档,文件类型的每个规范(例如 RUNTIME , LIBRARY 或 PUBLIC_HEADER )启动自己的安装子句,其中应用了所有其他选项。
即,选项COMPONENT sdk
仅 应用于文件类型PUBLIC_HEADER
。
其他文件(RUNTIME
,LIBRARY
)的组件选项未指定。