Я много боролся с этим сам. К сожалению, я не могу сказать, что нашел удовлетворительное решение, отчасти потому, что язык CMake примитивен и поэтому довольно ограничен.
Одной из идей, которая может быть применена к конкретному примеру кода, будет создание списка соответствующих целей в определенный момент после того, как вы их определили, и запуск цикла foreach
с использованием команд, которые применяются ко всем этим в унисон (т.е. в этом случае add_dependencies
и target_link_libraries
). Кроме того, вы можете использовать set_target_properties
для установки нескольких пар свойство-значение за один раз.
add_executable(foo src/foo1.cpp)
add_executable(bar src/bar2.cpp)
add_executable(baz src/baz3.cpp)
set(SPECIAL_TRGTS foo bar baz)
foreach(trgt ${SPECIAL_TRGTS})
add_dependencies(${trgt} some_dependency)
target_link_libraries(${trgt} mylib)
endforeach()
# and/or
set_target_properties(${SPECIAL_TRGTS} PROPERTIES
PROP1 val1
PROP2 val2)
Полагаю, это также вопрос личных предпочтений, и если список «специальных» целей достаточно велик для сохранения LOC при использовании подхода, основанного на циклах.
Мне также интересно, есть ли явно лучший подход к этому вопросу.