2016-01-29 102 views
1

我有一個客戶端/服務器應用程序的項目,並且我爲每個應用程序定義了一個安裝組件。使用CMake和CPack創建只包含一個組件的包

爲了在運行make package時得到兩個不同的包文件,我使用set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)。但我並沒有爲每個目標制定不同的目標。所以爲了獲得客戶端安裝包,我得到了編譯和打包的服務器應用程序。

有沒有一種簡單的方法來獲得單個組件的包裝?

回答

2

CMake假定在安裝前應該執行make all。 CPack在創建軟件包時也做出了相同的假設。如果您只想構建與某個特定組件相關的目標,則需要強制make all才能構建這些目標。

例如,您可以檢查哪些打算cmake命令行設置緩存變量:

的CMakeLists.txt

option(SERVER_ONLY "Set if you want to build only server") 
option(CLIENT_ONLY "Set if you want to build only client") 

if(NOT SERVER_ONLY) 
    add_subdirectory(client) 
endif() 

if(NOT CLIENT_ONLY) 
    add_subdirectory(server) 
endif() 

因此,對於構建和打包唯一的服務器組件,您可以使用

cmake -DSERVER_ONLY=ON <source-dir> 
cpack <...> 
相關問題