Qt Jenkins:CMake错误位于/usr/local/share/CMake-3.11/Modules/FindProtobuf.CMake

Qt Jenkins:CMake错误位于/usr/local/share/CMake-3.11/Modules/FindProtobuf.CMake,qt,jenkins,protocol-buffers,Qt,Jenkins,Protocol Buffers,我尝试在Jenkins构建服务器上运行CMakeLists.txt。带有protobuf调用的CMakeLists.txt如下所示: find_package(Protobuf REQUIRED) target_link_libraries(${PROJECT_NAME} INTERFACE ${Protobuf_LIBRARIES}) protobuf_generate_cpp(comm.pb.cc comm.pb.h proto/comm.proto) protobuf_g

我尝试在Jenkins构建服务器上运行CMakeLists.txt。带有protobuf调用的CMakeLists.txt如下所示:

find_package(Protobuf REQUIRED)
target_link_libraries(${PROJECT_NAME} INTERFACE ${Protobuf_LIBRARIES})

protobuf_generate_cpp(comm.pb.cc     comm.pb.h     proto/comm.proto)
protobuf_generate_cpp(comm_ccd.pb.cc comm_ccd.pb.h proto/comm_ccd.proto)
protobuf_generate_cpp(comm_cda.pb.cc comm_cda.pb.h proto/comm_cda.proto)
protobuf_generate_cpp(comm_plc.pb.cc comm_plc.pb.h proto/comm_plc.proto)
在Jenkins上运行CmakeList时,会生成以下错误:

12:01:11 CMake Error at /usr/local/share/cmake-3.11/Modules/FindProtobuf.cmake:425 (file):
12:01:11   file STRINGS file "/usr/local/include/google/protobuf/stubs/common.h"
12:01:11   cannot be read.
12:01:11 Call Stack (most recent call first):
12:01:11   libraries/ScAPIProtocol/CMakeLists.txt:35 (find_package)
CMake命令:

12:01:11 + cd build
12:01:11 + cmake -DCMAKE_PREFIX_PATH=/usr/local/opt/Qt/5.10.0/gcc_64 -DProtobuf_INCLUDE_DIR=/usr/local ../code

我现在得到了解决方案: 就像@MichałWalenciak建议的那样。您必须检查cmake调用的权限

首先,我必须将cmake调用调整为

cmake -DCMAKE_PREFIX_PATH=/usr/local/opt/Qt/5.10.0/gcc_64
      -DProtobuf_INCLUDE_DIR=/usr/local/include
      -DProtobuf_LIBRARY=/usr/local/lib/libprotobuf.so ../code
此外,jenkins使用属于“jenkins”组的“jenkins”用户执行这个bash调用。要使其正确读取protobuf文件,必须按如下所示更改用户和一组指定的include和lib目录:

$ sudo chown -R jenkins:jenkins /usr/local/include
$ sudo chown -R jenkins:jenkins /usr/local/lib

我希望这有帮助,至少对我来说是这样。感谢Michał。

是否存在
/usr/local/include/google/protobuf/stubs/common.h
?它似乎丢失或损坏。我的第一次尝试是将编译所需的所有文件复制到jenkins服务器。之后,我甚至在构建服务器上从源代码编译protobuf文件。我检查了目录,一切都正常,因为所有文件(包括common.h)都存在。检查文件权限。它可能没有所有用户的读取权限。我已检查过。一切都很好,容易接近。另外,关于用户和组访问权限:我尝试使用Jenkins的授权插件。我不知道哪个用户有效地调用了cmake命令。