Могу ли я нажать и открыть свойства цели CMake? - PullRequest
0 голосов
/ 28 августа 2018

Я хочу определить несколько целей, которые имеют определенные свойства (скажем, зависимости и библиотеки ссылок), а затем продолжить определять другие цели без этих свойств.

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 Ответ

0 голосов
/ 28 августа 2018

Я много боролся с этим сам. К сожалению, я не могу сказать, что нашел удовлетворительное решение, отчасти потому, что язык 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 при использовании подхода, основанного на циклах.

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

...