Изграждане на gRPC C++ с CMake на Linux

Опитвам се да създам gRPC (cpp) с помощта на CMake, но срещам грешки. Мога успешно да създам gRPC с make според инструкциите на gRPC cpp страница. Използването на make е отхвърлено, но CMake не работи за мен.

След като следвам инструкциите за изтегляне, клониране и т.н., отивам на „Изграждане с CMake“, където пише за Linux/Unix, направете това:

$ mkdir -p cmake/build
$ cd cmake/build
$ cmake ../..
$ make

За мен се проваля на 3-ти ред (cmake). Следното е резултатът:

$ cmake ../..
-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:138 (include):
  include could not find load file:

    cmake/zlib.cmake

< repeats above error for the following .cmake files: cares, protobuf, ssl, gflags, benchmark, address_sorting and nanopb>

Тези файлове (cmake/<package name>.cmake) не съществуват в директорията cmake/ на моята система. Не съм сигурен какво във файла CMakeLists.txt би ги накарало да се появят там.

Проучвайки този проблем, изпробвах различни комбинации от cmake опции, като -DBUILD_SHARED_LIBS=ON, -DgRPC_INSTALL=ON и -DgRPC<package_name>_PROVIDER=package за всеки от грешките, изброени по-горе. Винаги получавам едни и същи грешки. Накрая се опитах да стартирам скрипта run_distrib_test_cmake.sh. В крайна сметка се провали по същия начин.

Някакви идеи?


person ChrisF    schedule 04.01.2020    source източник


Отговори (2)


CMake файловете на трети страни (напр. cmake/zlib.cmake) съществуват в хранилището на GitHub, което сте клонирали (вижте тук). Моля, уверете се, че вашето хранилище е завършило клонирането напълно, за да включи всички подмодули, съгласно компилацията на gRPC документация:

Стартирайте от директория grpc след клониране на репо с --recursive или актуализиране на подмодули.

$ mkdir -p cmake/build
$ cd cmake/build
$ cmake ../..
$ make

Така че бъдете сигурни, че всичко е клонирано с:

git checkout --recurse-submodules

or

git submodule update --recursive
person squareskittles    schedule 04.01.2020
comment
Благодаря за отговора Публикувах отговор, но вашият отговор ме накара да погледна хронологията на командите си. Направих сляпо стъпките, които споменахте, но не забелязах, че директорията cmake беше изтеглена като част от клонинга. Така че вероятно съм изтрил cmake директорията в някакъв момент. Моят отговор вероятно е най-вече червена херинга (инсталиране на protocolbuf), въпреки че хълцането относно golang е реално. Ще редактирам отговора си и ще приема този. - person ChrisF; 04.01.2020

Както посочва @squareskittles, директорията cmake е част от клонинга. Вероятно неволно съм го изтрил и създал отново.

Освен това, единственото друго нещо, което трябваше да направя и което не беше споменато за компилации на Linux, беше да инсталирам golang (sudo apt-get install golang). Това беше споменато като предпоставка за Windows, но мисля, че трябва по-точно да се опише като предпоставка за CMake компилации, тъй като изглежда е необходимо за Linux, CMake компилации.

person ChrisF    schedule 04.01.2020