Как определить зависимость в CMake только от системы сборки, а не от целевой системы - PullRequest
0 голосов
/ 29 октября 2018

У меня следующая проблема: я создаю SDK, используя CMake. Во время процесса сборки открытый заголовочный файл, который позже отправляется клиентам, создается с помощью custom_target. Этот заголовочный файл нужен клиентским приложениям, а также примерным приложениям, которые поставляются как часть SDK. Поэтому в моей системе сборки примеры приложений в настоящее время выражают зависимость от цели, генерирующей заголовок, так что он генерируется перед попыткой сборки примера:

set(TARGET MyExample)
set(SOURCES ${TARGET}.cpp)
add_executable(${TARGET} ${SOURCES})
add_dependencies(${TARGET} InterfaceHeaderGenerator)
# ... more code 

Теперь в клиентской системе файл, сгенерированный InterfaceGenerator, конечно, уже присутствует, и поэтому эта зависимость недействительна.

Я ищу способ доставки моих файлов CMake клиенту таким образом, чтобы он мог их использовать, не поддерживая две разные копии файлов CMakeLists.txt для режимов «разработка» и «клиент».

Я знаю, что это, вероятно, можно решить с помощью выражений генератора в связи с CPack. Однако CPack я не могу использовать, потому что в нем отсутствует другая нужная мне функция: возможность доставки и установки ЖЕ цели в нескольких пакетах.

Возможно ли это вообще?

1 Ответ

0 голосов
/ 29 октября 2018

Защитите этот add_dependency() вызов с помощью if(BUILDING_SDK) и установите для этой переменной значение OFF по умолчанию и ON в вашем случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...