Могу ли я нажать и открыть свойства цели CMake?
Я хочу определить несколько целей, которые имеют определенные свойства (скажем, зависимости и библиотеки ссылок), а затем перейти к определению других целей без этих свойств.
add_executable(foo src/foo1.cpp)
add_dependencies(foo some_dependency)
target_link_libraries(foo mylib)
add_executable(bar src/bar2.cpp)
add_dependencies(bar some_dependency)
target_link_libraries(bar mylib)
add_executable(baz src/baz3.cpp)
add_dependencies(baz some_dependency)
target_link_libraries(baz mylib)
# and now without the dependencies...
add_executable(quux src/qux.cpp)
add_executable(quuz src/quuz.cpp)
Есть ли хорошая идиома для нажатия и выталкивания соответствующих свойств вместо этого?
1 ответ
Я много боролся с этим сам. К сожалению, я не могу сказать, что нашел удовлетворительное решение, отчасти потому, что язык 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 при использовании подхода, основанного на циклах.
Мне также интересно, если есть явно лучший подход к этому вопросу.