Итак, я нашел ответ, хотя это потребовало некоторого взлома. В основном я просто читал все файлы CMAKE, связанные с Protobuf, пока не разобрался. Возможно, там есть документы получше, но я не смог найти.
Краткая история:
если вы вызываете PROTOBUF_GENERATE_CPP
, он учитывает установку переменной Protobuf_IMPORT_DIRS
.
Однако, если вы напрямую вызываете protobuf_generate
для цели, как я, переменная игнорируется.
Ответ - вызвать protobuf_generate
с аргументом IMPORT_DIRS, например:
protobuf_generate(TARGET ${MY_PROJECT_NAME} IMPORT_DIRS protobuf)
IMPORT_DIRS - это несколько аргументов, вы можете указать несколько.
Вот соответствующий код:
function(protobuf_generate)
include(CMakeParseArguments)
set(_options APPEND_PATH)
set(_singleargs LANGUAGE OUT_VAR EXPORT_MACRO PROTOC_OUT_DIR PLUGIN)
if(COMMAND target_sources)
list(APPEND _singleargs TARGET)
endif()
set(_multiargs PROTOS IMPORT_DIRS GENERATE_EXTENSIONS)
cmake_parse_arguments(protobuf_generate "${_options}" "${_singleargs}" "${_multiargs}" "${ARGN}")
Надеюсь, это избавит кого-то от головной боли в будущем !