Могу ли я нажать и открыть свойства цели 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 при использовании подхода, основанного на циклах.

Мне также интересно, если есть явно лучший подход к этому вопросу.

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