Как связать флаг функции (определить) с внешней библиотекой в ​​CMake? - PullRequest
0 голосов
/ 15 января 2019

FindProtobuf.cmake для буферов протокола Google создает набор целей, например protobuf::libprotobuf-lite one.

Теперь в моем проекте я использую это protobuf::libprotobuf-lite в target_link_libraries. И это отлично работает.

Однако после обновления до protobuf v3 я заметил, что у сгенерированных файлов есть небольшие блоки, защищенные

#if LANG_CXX11

Тем не менее, как представляется, этот LANG_CXX11 не определяется FindProtobuf.cmake. Кажется, мне нужно определить его самостоятельно, если я хочу использовать функции C ++ 11 с кодом, сгенерированным протобуфом.

Очевидно, я мог бы сделать это глобально и покончить с этим. Однако я бы предпочел как-то «связать» LANG_CXX11 с целью protobuf::libprotobuf-lite, чтобы я получал его всякий раз, когда я его использовал, и только там, где я его использую.

target_compile_definitions не будет работать здесь, так как он не принимает импортированные цели, в то время как цели, созданные с помощью FindProtobuf.cmake, являются импортированными. И в любом случае, похоже, что это неправильно.

Единственная идея, которую я имею на данный момент (хотя еще не протестирована), - это создать еще одну настраиваемую цель, которая будет связывать (PUBLIC) только с protobuf::libprotobuf-lite и добавить определение LANG_CXX11 (также PUBLIC). Тогда я бы использовал эту пользовательскую цель вместо protobuf::libprotobuf-lite. Но это тоже нехорошо.

Как это сделать правильно с CMake? (Я на версии 3.8, если это имеет значение.)

...