Sorry about your difficulty here. Have you looked at our CMakeLists.txt example: https://github.com/protocolbuffers/protobuf/tree/main/examples#build-the-example-using-make
https://github.com/protocolbuffers/protobuf/blob/main/examples/CMakeLists.txt Just comparing it to https://github.com/petrasvestartas/protobuf_example/blob/main/CMakeLists.txt it looks like you're trying something extremely different (not just trying to patch issues with that example)? On Thu, Oct 2, 2025 at 5:36 AM Petras Vestartas <[email protected]> wrote: > Can you provide a CMakeLists.txt where I can build the Protobuf after I > clone the repository? > > I am trying to get an answer for two weeks. If I post a question on github > issue, it is immediately closed with one sentence random answer. > Protobuf is extremely good project, but please please please provide > support for C++ build and link. > > I do not want to use VCPKG or other package managers. > > > On Friday, 26 September 2025 at 15:19:27 UTC+2 Em Rauch wrote: > >> > I also do not understand the versioning logic, you are using v3.20 >> version while one year later we have v32 version. >> >> https://protobuf.dev/support/version-support/ >> >> C++Proto has gone from 3.20 to 6.32 in the time period you are looking >> at. >> >> We use a monotonically increasing minor that is the same across all >> languages, which is the release or protoc version which is "32.0". Each >> language uses that for its minor/point but has a language-specific major >> version: the 32.0 protoc is the one for C++ 6.32.0, C# 3.32.0, java 4.32.0. >> >> In the past few years we have shifted around where we shifted some places >> that were cross-language topics from calling it "3.20.0" to referring to it >> as "20.0" which is what you are noticing, but 3.20.0 was already >> cross-language-version=20.0. >> >> >> On Thu, Sep 25, 2025 at 12:33 PM Petras Vestartas <[email protected]> >> wrote: >> >>> Hi, >>> >>> Do you have cmake that works for the current version of protubuf? >>> >>> I also do not understand the versioning logic, you are using v3.20 >>> version while one year later we have v32 version. >>> >>> On Monday, 19 August 2024 at 15:49:47 UTC+2 Claude Robitaille wrote: >>> >>>> I forgot that this is required in my main project top CMakeList.txt: >>>> >>>> find_package(protobuf REQUIRED PATHS >>>> $ENV{INSTALL}/protobuf/lib/cmake/protobuf) >>>> include($ENV{INSTALL}/protobuf/lib/cmake/protobuf/protobuf-module.cmake) >>>> >>>> Also, I am on Linux but I do not see why it would be different on macOS. >>>> >>>> >>>> On Monday, August 19, 2024 at 9:46:38 a.m. UTC-4 Claude Robitaille >>>> wrote: >>>> >>>>> I have been using protobuf with static linking for years and moved to >>>>> cmake a few months ago. >>>>> >>>>> Since I always cross-compile I never use the system installed library >>>>> and tools so my flow is this >>>>> 1 - Build, using cmake anything that must be using the local compiler >>>>> (in the case of protobuf because protoc is needed for later). ATM it is >>>>> only protobuf >>>>> 2 - Build all the dependencies, also using cmake >>>>> 3 - Build my project, including internal libraries. >>>>> >>>>> For the first step, ie building protobuf and produce a static archive >>>>> (a file ending with .a) I use this excerpt from the corresponding cmake: >>>>> include(ExternalProject) >>>>> >>>>> ExternalProject_Add( >>>>> protobuf >>>>> GIT_REPOSITORY https://github.com/protocolbuffers/protobuf.git >>>>> GIT_TAG v3.20.3 >>>>> SOURCE_SUBDIR cmake >>>>> CMAKE_ARGS >>>>> -Dprotobuf_BUILD_TESTS=OFF >>>>> -Dprotobuf_BUILD_EXAMPLES=OFF >>>>> -DCMAKE_INSTALL_PREFIX=$ENV{INSTALL}/protobuf >>>>> -Dprotobuf_BUILD_CONFORMANCE=OFF >>>>> -Dprotobuf_BUILD_EXAMPLES=OFF >>>>> -Dprotobuf_BUILD_LIBPROTOC=ON >>>>> -Dprotobuf_BUILD_SHARED_LIBS=OFF >>>>> -Dprotobuf_MSVC_STATIC_RUNTIME=OFF >>>>> -Dprotobuf_WITH_ZLIB=OFF >>>>> BUILD_BYPRODUCTS >>>>> $ENV{INSTALL}/lib/libprotobuf.a >>>>> $ENV{INSTALL}/bin/protoc >>>>> ) >>>>> >>>>> Note that the install prefix comes from an environment variable. It is >>>>> normally set to ./build In other word, protobuf and the cmake files are >>>>> in >>>>> a child directory off the main build location (which is used by step 3 >>>>> above). Also, SHARED_LIBS is Off meaning that a static library is created. >>>>> >>>>> And then in my main project (so step 3 above), I use this to process >>>>> my proto files (I use to only deal with c++ hence the name; I added python >>>>> at a later stage): >>>>> >>>>> set(GLOBAL_PROTO_FILES "" CACHE INTERNAL "") >>>>> >>>>> # Define the append function used by other CMakeList files >>>>> function(append_proto_file filename) >>>>> set(GLOBAL_PROTO_FILES ${GLOBAL_PROTO_FILES} ${filename} CACHE >>>>> INTERNAL "") >>>>> endfunction() >>>>> >>>>> # >>>>> # The proto file processing function >>>>> # >>>>> >>>>> function(CREATE_CPP_PROTO SRCS HDRS) >>>>> list(REMOVE_DUPLICATES GLOBAL_PROTO_FILES) >>>>> >>>>> set(${SRCS}) >>>>> set(${HDRS}) >>>>> >>>>> #printList(VAR ${PROTO_SRC_TREE} TITLE "Proto location location") >>>>> #printList(VAR ${GLOBAL_PROTO_FILES} TITLE "Proto files") >>>>> >>>>> add_library(proto-objects OBJECT ${GLOBAL_PROTO_FILES}) >>>>> target_link_libraries(proto-objects PUBLIC protobuf::libprotobuf) >>>>> target_include_directories(proto-objects PUBLIC >>>>> "$<BUILD_INTERFACE:$ENV{GENERATED}>") >>>>> >>>>> make_directory($ENV{GENERATED}) >>>>> make_directory($ENV{GENERATED}/python) >>>>> >>>>> # This is a function provided by the cmake binding for protobuf >>>>> # C++ >>>>> protobuf_generate( >>>>> TARGET proto-objects >>>>> LANGUAGE cpp >>>>> PROTOC_OUT_DIR $ENV{GENERATED} >>>>> IMPORT_DIRS ${MODELS_DIR};${PROTO_SRC_TREE} >>>>> #IMPORT_DIRS ${MODELS_DIR} >>>>> #PROTOC_OPTIONS "--cpp_opt=paths=source_relative" >>>>> #PROTOC_OPTIONS "--proto_path=${MODELS_DIR}" >>>>> ) >>>>> >>>>> # Python >>>>> protobuf_generate( >>>>> TARGET proto-objects >>>>> LANGUAGE python >>>>> PROTOC_OUT_DIR $ENV{GENERATED}/python >>>>> IMPORT_DIRS ${MODELS_DIR};${PROTO_SRC_TREE} >>>>> ) >>>>> >>>>> target_include_directories(proto-objects PRIVATE $ENV{GENERATED}) >>>>> >>>>> # Probably useless but other targets depends on it, so we keep it >>>>> but it does nothing. In future we could probably remove >>>>> # reference to it. >>>>> add_custom_target(PROTO_FILES_READY >>>>> COMMENT "Moving .pb.h and _pb2.py files to replicate source >>>>> directory structure" >>>>> ) >>>>> >>>>> set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES >>>>> GENERATED TRUE) >>>>> set(${SRCS} ${${SRCS}} PARENT_SCOPE) >>>>> set(${HDRS} ${${HDRS}} PARENT_SCOPE) >>>>> endfunction() >>>>> >>>>> >>>>> >>>>> On Monday, August 19, 2024 at 2:32:25 a.m. UTC-4 Marcin Lewandowski >>>>> wrote: >>>>> >>>>>> Hello, >>>>>> >>>>>> I am working on a library where I would use protobuf. >>>>>> >>>>>> I need to link it statically. The target platform is macOS. >>>>>> >>>>>> The usual way of fetching dependencies (brew install protobuf) is no >>>>>> go, as it comes only with shared libraries. >>>>>> >>>>>> I tried forcing homebrew to rebuild protobuf (brew install protobuf >>>>>> --build-from-source) but it fails as some tests are not passing (logs [1] >>>>>> at the end of this message). >>>>>> >>>>>> I fetched the source code (27.3) release from github, run >>>>>> >>>>>> bazel build :portico :protobuf >>>>>> >>>>>> inside the source directory, but while it compiles protoc compiler, >>>>>> there's no CMake/protobuf-lite library in the output. >>>>>> >>>>>> Apparently the runtime is based on CMake, so I run >>>>>> >>>>>> cmake -S . -B build -Dprotobuf_BUILD_TESTS=OFF >>>>>> -DCMAKE_CXX_STANDARD=17 -Dprotobuf_ABSL_PROVIDER=package >>>>>> -Dprotobuf_JSONCPP_PROVIDER=package >>>>>> >>>>>> and then issued compilation in build/ dir, and yay, it compiled >>>>>> protobuf. >>>>>> >>>>>> However, when I added the build/cmake to CMAKE_PREFIX_PATH it >>>>>> complains about missing build/cmake/protobuf/protobuf-targets.cmake >>>>>> >>>>>> So I tried adding the repository as git submodule, and adding it via >>>>>> add_subdirectory CMake command, then it fails with >>>>>> >>>>>> CMake Error: install(EXPORT "protobuf-targets" ...) includes target >>>>>> "libprotobuf-lite" which requires target "absl_absl_check" that is not in >>>>>> any export set. >>>>>> CMake Error: install(EXPORT "protobuf-targets" ...) includes target >>>>>> "libprotobuf-lite" which requires target "absl_absl_log" that is not in >>>>>> any >>>>>> export set. >>>>>> CMake Error: install(EXPORT "protobuf-targets" ...) includes target >>>>>> "libprotobuf-lite" which requires target "absl_algorithm" that is not in >>>>>> any export set. >>>>>> CMake Error: install(EXPORT "protobuf-targets" ...) includes target >>>>>> "libprotobuf-lite" which requires target "absl_base" that is not in any >>>>>> export set. >>>>>> ... >>>>>> >>>>>> abseil is added as add_subdirectory as well. >>>>>> >>>>>> I run into conclusion that I must be doing something fundamentally >>>>>> wrong, as I don't expect such popular piece of code to be so hard to >>>>>> integrate. >>>>>> >>>>>> Any suggestions on how to properly embed protobuf within such a >>>>>> project? >>>>>> >>>>>> Thanks in advance, >>>>>> >>>>>> Marcin >>>>>> >>>>>> [1] Failed tests: >>>>>> >>>>>> 2: [ RUN ] TextFormatParserTest.ParseFieldValueFromString >>>>>> 2: E0000 00:00:1723926116.158054 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected >>>>>> integer, >>>>>> got: a >>>>>> 2: E0000 00:00:1723926116.158063 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Integer out of >>>>>> range (999999999999999999999999999999999999) >>>>>> 2: E0000 00:00:1723926116.158079 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected >>>>>> integer, >>>>>> got: a >>>>>> 2: E0000 00:00:1723926116.158082 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Integer out of >>>>>> range (999999999999999999999999999999999999) >>>>>> 2: E0000 00:00:1723926116.158084 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected >>>>>> integer, >>>>>> got: - >>>>>> 2: E0000 00:00:1723926116.158085 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected >>>>>> integer, >>>>>> got: a >>>>>> 2: E0000 00:00:1723926116.158087 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Integer out of >>>>>> range (999999999999999999999999999999999999) >>>>>> 2: E0000 00:00:1723926116.158089 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected >>>>>> integer, >>>>>> got: - >>>>>> 2: E0000 00:00:1723926116.158090 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected >>>>>> integer, >>>>>> got: a >>>>>> 2: E0000 00:00:1723926116.158092 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Integer out of >>>>>> range (999999999999999999999999999999999999) >>>>>> 2: E0000 00:00:1723926116.158094 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected >>>>>> integer, >>>>>> got: - >>>>>> 2: E0000 00:00:1723926116.158095 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected >>>>>> integer, >>>>>> got: a >>>>>> 2: E0000 00:00:1723926116.158097 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Integer out of >>>>>> range (999999999999999999999999999999999999) >>>>>> 2: E0000 00:00:1723926116.158101 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:5: Invalid value >>>>>> for >>>>>> boolean field "optional_bool". Value: "tRue". >>>>>> 2: E0000 00:00:1723926116.158106 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:6: Invalid value >>>>>> for >>>>>> boolean field "optional_bool". Value: "faLse". >>>>>> 2: E0000 00:00:1723926116.158108 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Integer out of >>>>>> range (2) >>>>>> 2: E0000 00:00:1723926116.158109 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected >>>>>> identifier, got: - >>>>>> 2: E0000 00:00:1723926116.158111 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:3: Invalid value >>>>>> for >>>>>> boolean field "optional_bool". Value: "on". >>>>>> 2: E0000 00:00:1723926116.158113 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:2: Invalid value >>>>>> for >>>>>> boolean field "optional_bool". Value: "a". >>>>>> 2: E0000 00:00:1723926116.158130 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected double, >>>>>> got: a >>>>>> 2: E0000 00:00:1723926116.158132 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected double, >>>>>> got: a >>>>>> 2: E0000 00:00:1723926116.158134 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expect a decimal >>>>>> number, got: 0xf >>>>>> 2: E0000 00:00:1723926116.158136 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expect a decimal >>>>>> number, got: 012 >>>>>> 2: E0000 00:00:1723926116.158138 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected string, >>>>>> got: hello >>>>>> 2: E0000 00:00:1723926116.158141 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:7: Unknown >>>>>> enumeration value of "FOOBAR" for field "optional_nested_enum". >>>>>> 2: E0000 00:00:1723926116.158143 5519321 text_format.cc:417] Error >>>>>> parsing text-format protobuf_unittest.TestAllTypes: 1:1: Expected "{", >>>>>> found "any". >>>>>> >>>>>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Protocol Buffers" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion visit >>> https://groups.google.com/d/msgid/protobuf/50117e7f-799a-4019-97c2-8817cf45e929n%40googlegroups.com >>> <https://groups.google.com/d/msgid/protobuf/50117e7f-799a-4019-97c2-8817cf45e929n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > You received this message because you are subscribed to the Google Groups > "Protocol Buffers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion visit > https://groups.google.com/d/msgid/protobuf/b518e01f-1234-4361-818e-06c57f07f916n%40googlegroups.com > <https://groups.google.com/d/msgid/protobuf/b518e01f-1234-4361-818e-06c57f07f916n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/protobuf/CAKRmVH9tS7yRKBqDm%2Bnab3MvLGox_MVrRt9v_1mDA5kBcfR4Pw%40mail.gmail.com.
