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, если это имеет значение.)