包括Protobuf 3.3.0作为CMake子目录

包括Protobuf 3.3.0作为CMake子目录,cmake,protocol-buffers,Cmake,Protocol Buffers,是否可以将Protobuf[3.3.0]作为子目录包含到我的CMake项目中?我似乎无法将它与我的其他项目一起作为代码库编译的一部分 如果我只是将其添加为子目录,它可以很好地编译,但我无法使用find_包并将其指向protobuf_目录,因为我得到以下结果: set(protobuf_DIR C:/dev/cmake-protobuf-example-sub/cmake-build-debug/protobuf/cmake/cmake) find_package(protobuf 3.3.0 C

是否可以将Protobuf[3.3.0]作为子目录包含到我的CMake项目中?我似乎无法将它与我的其他项目一起作为代码库编译的一部分

如果我只是将其添加为子目录,它可以很好地编译,但我无法使用find_包并将其指向protobuf_目录,因为我得到以下结果:

set(protobuf_DIR C:/dev/cmake-protobuf-example-sub/cmake-build-debug/protobuf/cmake/cmake)
find_package(protobuf 3.3.0 CONFIG REQUIRED)
给我:

CMake Error at CMakeLists.txt:5 (find_package):
  Could not find a configuration file for package "protobuf" that is
  compatible with requested version "3.3.0".

  The following configuration files were considered but not accepted:

    C:/dev/cmake-protobuf-example-sub/cmake-build-debug/protobuf/cmake/cmake/protobuf-config.cmake, version: 3.3.0
为了让CMake接受protobuf配置,我需要编译它吗


谢谢

诀窍是不要使用
查找包
。如果您将其作为项目的一部分进行构建:

add_subdirectory(protobuf)
然后,只需针对它进行链接即可:

target_link_libraries(mytarget libprotobuf)
但是有一个缺点:
PROTOBUF\u GENERATE\u CPP
函数将不可用,因此您需要添加自己的自定义命令来执行此步骤:

add_custom_command(OUTPUT myfile.pb.h myfile.pb.cc
                   COMMAND protoc myfile.proto -I PATH_TO_MYFILE --cpp_out=.)

target_sources(mytarget PRIVATE myfile.pb.h myfile.pb.cc)

即使是编译(构建)也不够:您需要先安装该软件包,然后再将其与
find_package()
一起使用。通过将其作为外部项目添加来解决并安装它,谢谢您的评论