CMake не может найти protobuf при компиляции примера protobuf от Google - PullRequest
2 голосов
/ 28 мая 2020

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

Я делаю это на Windows 10 с VS2017 и последней установленной версией VS Code. Я установил protobuf с помощью vcpkg install protobuf:

Пакет protobuf: x64- windows предоставляет цели CMake:

find_package(protobuf CONFIG REQUIRED)
target_link_libraries(main PRIVATE protobuf::libprotoc protobuf::libprotobuf protobuf::libprotobuf-lite)

Я скачал и извлек Google пример кода и извлек его на свой диск. Файл .PROTO компилируется без проблем:

d:\protobuf-3.12.2\examples>protoc -I=d:\protobuf-3.12.2\examples --cpp_out=d:\protobuf-3.12.2\examples d:\protobuf-3.12.2\examples\addressbook.proto

и создает два файла «addressbook.pb. cc» и «addressbook.pb.h», как и ожидалось.

Теперь когда я пытаюсь скомпилировать проект в Visual Studio Code, он постоянно терпит неудачу, независимо от того, как я изменяю файл CMakeLists.txt. Как уже упоминалось, я просмотрел десятки тем, касающихся этой проблемы, и безуспешно пытался.


Обновление 29.05.2020

Я проверил, что protobuf установлен только один раз, и действительно, демонстрационный пакет также включал полную установку protobuf. Я удалил этот дополнительный демонстрационный пакет и удалил / установил protobuf с помощью vcpgk. Затем я скомпилировал файл .proto с помощью proto c (который находится на моем пути) и получил два файла «addressbook.pb. cc» и «addressbook.pb.h».

Затем я попытался скомпилировать проект еще раз, на этот раз с использованием CMakeLists.txt , поставляемого с демонстрацией.

Соответствующая часть, кажется, находится в самом начале:

# Minimum CMake required
cmake_minimum_required(VERSION 2.8.12)
# Project
project(protobuf-examples)
# Find required protobuf package
find_package(protobuf CONFIG REQUIRED)
if(protobuf_VERBOSE)
  message(STATUS "Using Protocol Buffers ${Protobuf_VERSION}")
endif()
set(CMAKE_INCLUDE_CURRENT_DIR TRUE)

Компиляция дает мне:

[main] Building folder: examples 
[main] Configuring folder: examples 
[cms-client] Configuring using the "Visual Studio 15 2017" CMake generator with platform "x64" and toolset "host=x64"
[cmake] Selecting Windows SDK version 10.0.17763.0 to target Windows 
...
[cmake] CMake Error at CMakeLists.txt:8 (find_package):
[cmake]   Could not find a package configuration file provided by "protobuf" with any
[cmake]   of the following names:
[cmake] 
[cmake]     protobufConfig.cmake
[cmake]     protobuf-config.cmake
[cmake] 
[cmake]   Add the installation prefix of "protobuf" to CMAKE_PREFIX_PATH or set
[cmake]   "protobuf_DIR" to a directory containing one of the above files.  If
[cmake]   "protobuf" provides a separate development package or SDK, be sure it has
[cmake]   been installed.
[cmake] 
[cmake] 
[cmake] Configuring incomplete, errors occurred!
[cmake] See also "d:/vcpkg/buildtrees/protobuf/src/v3.12.0-8ba83cbbdb/examples/build/CMakeFiles/CMakeOutput.log".
[cms-driver] Error during CMake configure: [cmake-server] Configuration failed.

Файл protobuf-config.cmake можно найти несколько раз в папке protobuf:

  • D:\vcpkg\buildtrees\protobuf\<BUILDCFG>\share\protobuf\protobuf-config.cmake
  • D:\vcpkg\installed\<BUILDCFG>\share\protobuf\protobuf-config.cmake
  • D:\vcpkg\packages\<BUILDCFG>\share\protobuf\protobuf-config.cmake

Что может быть причиной того, что CMake не может найти эти файлы?

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Справедливое предупреждение, я не эксперт.

Я столкнулся с аналогичной проблемой в моей собственной сборке, пытаясь заставить работать Boost, и я думаю, что это связано с вашими переменными среды и тем, как у вас есть Visual Studio настроить. Пока вы устанавливаете важные вещи, такие как

SET(PROTOBUF_INCLUDE_DIR "d:/vcpkg/packages/protobuf_x64-windows/include/")

, фактический find_package (protobuf CONFIG REQUIRED) выбрасывает эти настройки из окна. Как только он находит этот файл конфигурации, его заботит только то, что он находит, я думаю, это причина того, что ваше первое СООБЩЕНИЕ имеет правильное, а ваше второе не находит его.

Вы уверены, что у вас есть только одна установка protobuf на вашем компьютере?

  • Похоже, что это «используется в качестве подключаемого каталога в каталоге D: /protobuf-3.12.2/examples»
  • но вы пытаетесь найти "D: ​​/ vcpkg / packages / protobuf_x64- windows" нет?

Попробуйте добавить "- DCMAKE_PREFIX_PATH =" d: / vcpkg / packages / protobuf_x64- windows " к параметрам CMake в Visual Studio

Удачи и извините, если это не поможет, я относительно новичок в программировании, но попробовать стоит.

0 голосов
/ 28 мая 2020

Если проблема заключается в нахождении установки protobuf, тогда ваш путь protobuf не находится в переменных среды, попробуйте добавить это к своему пути и дайте мне знать, если он там есть. Буду рад помочь вам, если это не сработает

...