Здесь не было особой активности, поэтому я сам нашел работоспособное решение.Это, вероятно, не идеально, поэтому, если у вас есть идея получше, добавьте ее!
Теперь сложно перебрать конфиги сборки в cmake, потому что критические переменные cmake не живут в области действия функции - так что дляНапример, если вы сделаете include_directories(X)
, каталог X останется в списке включения даже после выхода из функции.
Каталоги имеют область действия - и хотя обычно каждый входной каталог соответствует одному выходному каталогу, вы может иметь несколько выходных каталогов.
Итак, мое решение выглядит следующим образом:
project(FooAllConfigs)
set(FooVar 2)
set(FooAnotherVar b)
add_subdirectory("project_dir" "out-2b")
set(FooVar 5)
set(FooAnotherVar c)
add_subdirectory("project_dir" "out-5c")
set(FooVar 3)
set(FooAnotherVar b)
add_subdirectory("project_dir" "out-3b")
set(FooVar 3)
set(FooAnotherVar c)
add_subdirectory("project_dir" "out-3c")
Обычный каталог проекта содержит файл CMakeLists.txt
с кодом для настройкисоответствующие параметры включают в себя и параметры компилятора, заданные глобальными переменными, установленными в проекте FooAllConfigs
, и также определяют суффикс сборки, добавляемый ко всем выводам сборки - любой даже косвенно включенный вывод (например, сгенерированный add_executable
) должен иметь уникальныйназвание.
Это прекрасно работает для меня.