ошибка в gitlab при создании проекта с помощью grpc

#c #cmake #protocol-buffers #grpc

#c #cmake #протокол-буферы #grpc

Вопрос:

Локально он создает проект с помощью grpc. но на gitlab он выдает ошибку. У кого-нибудь есть какие-нибудь идеи? Локально все строится и работает хорошо. Я получаю проблему, когда использую CI в gitlab. Что может означать эта ошибка? Я не понимаю, что именно требуется? Я также пробовал работать с разными компиляторами — ошибка сохраняется.

 $ cmake --build .
[  4%] Running C   gRPC compiler on include/protocol/proto/service.proto
[  8%] Running cpp protocol buffer compiler on /builds/k-morozov/appchat/build/src/protocol
Could not map to virtual file: /builds/k-morozov/appchat/build/src/protocol: Input file is a directory.
make[2]: *** [src/protocol/CMakeFiles/protocol_lib.dir/build.make:63: src/protocol/protocol.pb.h] Error 1
make[1]: *** [CMakeFiles/Makefile2:93: src/protocol/CMakeFiles/protocol_lib.dir/all] Error 2
 

cmake:

 cmake_minimum_required(VERSION 3.5)
set(PROTOBUF_FILES
  "include/protocol/proto/messages.proto"
)
set(PROTOS_FILES
  ${PROTOBUF_FILES}
  "include/protocol/proto/service.proto"
)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
find_package(Protobuf REQUIRED)
find_package(GRPC REQUIRED)
find_package(Threads REQUIRED)

set(PROTO_SRC_DIR ${CMAKE_CURRENT_BINARY_DIR})
file(MAKE_DIRECTORY ${PROTO_SRC_DIR})
include_directories(${PROTO_SRC_DIR})

protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_SRC_DIR} ${PROTOS_FILES})
grpc_generate_cpp(GRPC_SRCS GRPC_HDRS ${PROTO_SRC_DIR} ${PROTOS_FILES})

set(PROTOCOL_LIB_NAME protocol_lib)
add_library(${PROTOCOL_LIB_NAME} STATIC)

target_sources(${PROTOCOL_LIB_NAME}
    PUBLIC
        ${CMAKE_CURRENT_SOURCE_DIR}/include/protocol/protocol.h
    PRIVATE
        ${PROTO_HDRS}
        ${PROTO_SRCS}
        ${GRPC_SRCS}
        "include/protocol/command_table.h"
)

set_target_properties(${PROTOCOL_LIB_NAME} PROPERTIES
        CXX_STANDARD 17
        CXX_STANDARD_REQUIRED ON
)

target_compile_options(${PROTOCOL_LIB_NAME} PRIVATE "-fPIC")
target_link_libraries(${PROTOCOL_LIB_NAME}
    PUBLIC
        gpr
        gRPC::grpc  
        protobuf::libprotobuf
        gRPC::grpc  _reflection
    PRIVATE
        pthread
        project_sanitizers
)

include_directories(${Protobuf_INCLUDE_DIRS})

target_include_directories(${PROTOCOL_LIB_NAME}
    PUBLIC
        "./include"
        ${CMAKE_BINARY_DIR}/src/protocol/
    PRIVATE
        ${CMAKE_CURRENT_BINARY_DIR}
        ${CMAKE_CURRENT_SOURCE_DIR}
)
 

Комментарии:

1. Он пишет, что для файла запущен компилятор /builds/k-morozov/appchat/build/src/protocol . У вас есть этот файл? Это файл или каталог?

2. это каталог, в котором хранятся файлы * .pb.h

3. На самом деле строка Running cpp protocol buffer compiler ... взята из модуля Protobuf , а не из grpc. Вы используете protobuf_generate_cpp функцию, сигнатура которой protobuf_generate_cpp (<SRCS> <HDRS> [<ARGN>...]) . То есть каждый параметр после второго обрабатывается как прото-файл. И среди тех параметров, которые вы передаете ${PROTO_SRC_DIR} , это каталог , а не файл . Похоже, что сообщение об ошибке относится именно к этому параметру.