Как построить проект Cmake, который использует Protobuf?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как построить проект Cmake, который использует Protobuf?

Сообщение Anonymous »

Я пытаюсь создать небольшой тестовый проект C ++, который использует Protobuf и систему сборки Cmake. txt .
Тем не менее, это не масштабируемая структура.
Следующее изменение, которое я пытался Код> каталог и переместить файлы *.proto в этот каталог.
Проект больше не строит, и я не могу понять, как его исправить.
Я искал в Интернете решения, а также попытался спросить CHATGPT. CHATGPT ходил по кругу, и я нашел то, что казалось очень переменными решениями, поиск ограниченных ресурсов, которые я мог найти в Интернете. Для меня не было очевидно, какие из многих вариаций могут быть правильным способом, но это, скорее всего, потому, что я не эксперт с Cmake , поэтому не мог выяснить, как собрать различные части вместе . < /p>
Это то, что у меня сейчас есть: < /p>

Код: Выделить всё

protobuf-example/
proto/
CMakeLists.txt
message.proto
CMakeLists.txt
main.cpp
< /code>
[h4]proto/CMakeLists.txt
[/h4]
Я не совсем уверен, что из приведенного ниже требуется. У меня есть некоторое понимание того, что делает каждая из этих строк, но мое понимание не очень твердое. < /P>

Код: Выделить всё

set(PROTO_FILES message.proto)
set(GENERATED_PROTO_DIR ${CMAKE_CURRENT_BINARY_DIR}/generated)
file(MAKE_DIRECTORY ${GENERATED_PROTO_DIR})

protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES})

add_library(proto_files STATIC ${PROTO_SRCS})

target_include_directories(proto_files PUBLIC ${Protobuf_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR})

target_link_libraries(proto_files PUBLIC ${Protobuf_LIBRARIES})

set(PROTO_GEN_SRCS ${PROTO_SRCS} PARENT_SCOPE)
set(PROTO_GEN_HDRS ${PROTO_HDRS} PARENT_SCOPE)
set(PROTO_INCLUDE_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)
< /code>
[h4]message.proto
[/h4]

Код: Выделить всё

syntax = "proto3";

message Person {
string name = 1;
int32 age = 2;
string email = 3;
}
< /code>
[h4]CMakeLists.txt
[/h4]
С другой стороны, я знаком с этими утверждениями, и я совершенно уверен, что знаю, что делает каждый из них.

Код: Выделить всё

cmake_minimum_required(VERSION 3.10)
project(ProtobufExample LANGUAGES CXX)

find_package(Protobuf REQUIRED)

add_subdirectory(proto)

add_executable(protobuf_example main.cpp ${PROTO_GEN_SRCS})

target_include_directories(protobuf_example PRIVATE ${Protobuf_INCLUDE_DIR})

target_link_libraries(protobuf_example PRIVATE ${proto_files})
< /code>
[h4]main.cpp
[/h4]
Насколько мне известно, это просто стандартный пример.

Код: Выделить всё

#include 
#include 
#include "message.pb.h"

void serializePerson(const std::string& filename) {
Person person;
person.set_name("John Doe");
person.set_age(30);
person.set_email("john.doe@example.com");

std::ofstream output(filename, std::ios::binary);
if (!person.SerializeToOstream(&output)) {
std::cerr 

Подробнее здесь: [url]https://stackoverflow.com/questions/79423920/how-to-build-a-cmake-project-which-uses-protobuf[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»