Как сказать cmake генерировать разные цели по умолчанию для сборок вне исходного кода?

Как я могу написать CMakeLists.txt файл, который принимает различные сборки из исходного кода? Я не говорю об Отладке и Выпуске, но больше о чем-то вроде одной сборки для удаленного тестирования, одной для локального тестирования и т. Д.

Например: если я пойду в build_local построить каталог и запустить make Я хочу, чтобы исходники были скомпилированы для локальной конфиграции. Если я бегу make в build_production Сборка каталога Я хочу скомпилировать исходники, используя другую конфигурацию. Я понимаю, что мне нужны исходные сборки. Я просто не совсем понимаю, как:

  1. скажите cmake, какую конфигурацию генерировать (например, cd build_local; cmake -D local?)
  2. как написать CMakeLists.txt файл таким образом, что он генерирует другую цель по умолчанию (т.е. make all или же make) в зависимости от конфигурации

Есть ли у кого-нибудь пример или ссылка на соответствующую документацию?

Спасибо!

1 ответ

Решение

С помощью if Команда вы можете заполнить цель по умолчанию (и другие) с различными значениями, в зависимости от конфигурации.

CMakeLists.txt:

...
option(LOCAL "Build local-testing project" OFF)
if(LOCAL)
    add_executable(program_local local.c)
else()
    add_executable(program_remote remote.c)
endif()

локальная сборка:

cd build_local
cmake -DLOCAL=ON ..
make
...

удаленная сборка:

cd build_remote
cmake ..
make

В if ветви вы можете использовать даже разные add_subdirectory() команды, поэтому ваш настроенный проект может полностью отличаться для разных конфигураций.

Другие вопросы по тегам