Как сказать cmake генерировать разные цели по умолчанию для сборок вне исходного кода?
Как я могу написать CMakeLists.txt
файл, который принимает различные сборки из исходного кода? Я не говорю об Отладке и Выпуске, но больше о чем-то вроде одной сборки для удаленного тестирования, одной для локального тестирования и т. Д.
Например: если я пойду в build_local
построить каталог и запустить make
Я хочу, чтобы исходники были скомпилированы для локальной конфиграции. Если я бегу make
в build_production
Сборка каталога Я хочу скомпилировать исходники, используя другую конфигурацию. Я понимаю, что мне нужны исходные сборки. Я просто не совсем понимаю, как:
- скажите cmake, какую конфигурацию генерировать (например,
cd build_local; cmake -D local
?) - как написать
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()
команды, поэтому ваш настроенный проект может полностью отличаться для разных конфигураций.