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.

Reply via email to