Сборка Protobufs не связана с основной программой с помощью CMake - PullRequest
0 голосов
/ 21 октября 2018

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

fatal error: 
      'google/protobuf/stubs/common.h' file not found
#include <google/protobuf/stubs/common.h>
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

Я опубликую свою структуру каталогов для этого проекта

Изображение структуры каталогов

структура каталогов расширена

Вот мои файлы CMakeLists.txt

верхнего уровня в TestCode /

cmake_minimum_required(VERSION 3.5)
set (CMAKE_CXX_STANDARD 11)

add_subdirectory(protobufs)
add_subdirectory(main)

CMakeList.txt в main /

cmake_minimum_required(VERSION 3.5)

set (CMAKE_CXX_STANDARD 11)

add_executable(test_exe 
    main.cc 
)
target_link_libraries(protos ${PROTOBUF_LIBRARIES})

CMakeLists под protobufs /

cmake_minimum_required(VERSION 3.5)

set (CMAKE_CXX_STANDARD 11)

find_package(Protobuf REQUIRED)

PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS 
    dog.proto
)
add_library(protos ${PROTO_SRCS})

target_link_libraries(protos 
    PUBLIC
    ${PROTOBUF_LIBRARIES}
)

target_include_directories(protos
    PUBLIC
    ${PROTOBUF_INCLUDE_DIRS}
    ${CMAKE_CURRENT_BINARY_DIR}
)

Вот как я строю проект

cd build
cmake ..
make -j8

Я не могу понять, почему не найдены protobufs дляосновная программа.если я просто попытаюсь собрать protobufs, используя make, то они будут успешно построены.Любые идеи будут оценены.

РЕДАКТИРОВАТЬ: Я решил это.В моем CMakeLists.txt в main / мне нужно было добавить test_exe в мой target_link_libraries

cmake_minimum_required(VERSION 3.5)

set(CMAKE_CXX_STANDARD 11)


add_executable(test_exe 
    main.cc 
)
target_link_libraries(test_exe protos)

1 Ответ

0 голосов
/ 21 октября 2018

Эта ошибка:

Файл 'google / protobuf / stubs / common.h' не найден

, потому что вы не указываете компилятору, где находится ваш заголовок protobufфайлы есть.Можете ли вы найти на вашем компьютере файл «google / protobuf / stubs / common.h»?Если он не установлен, вам необходимо установить его (используя системный менеджер пакетов).Если он установлен, вам нужно добавить правило каталога для родительского каталога (содержащего google) в CMake.

...