2017-02-01 5 views
0

Voici le fichier CMake assez trivial suivant:cpack composant NSIS est Non spécifié

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) 

Avec cette lib.h:

#pragma once 

int sides_of_a_dice(); 

Et lib.cpp:

int sides_of_a_dice() 
{ 
    return 6; 
} 

Donc, si je nmake package pour cette sur Windows pour une raison quelconque met Dice.dll dans un composant Unspecified, même si le composant est clairement spécifié. Encore plus bizarre, les en-têtes publics (lib.h) vont correctement dans le composant 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 

Que se passe-t-il?

Répondre

1

Selon la documentation pour la commande install, toutes les spécifications du type de fichier (comme RUNTIME, BIBLIOTHÈQUE ou PUBLIC_HEADER) commence sa propre installation clause, à laquelle toutes les autres options sont appliquées.

C'est, l'option COMPONENT sdk est appliquée uniquement au type de fichier PUBLIC_HEADER.

D'autres fichiers (RUNTIME, LIBRARY) ont l'option composante non spécifiée.