2016-01-29 5 views
1

У меня есть проект для приложения клиент/сервер, и я определил один компонент установки для каждого.Создайте пакет только для одного компонента с CMake и CPack

Я использую set(CPACK_ARCHIVE_COMPONENT_INSTALL ON), чтобы получить два разных файла пакета при запуске make package. Но у меня нет разных целей для каждого. Поэтому, чтобы получить клиентский установочный пакет, я получаю и скомпилированное и упакованное приложение сервера.

Есть ли простой способ получить упаковку для одного компонента?

ответ

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 <...>