qt - Jenkins: CMake Error at /usr/local/share/cmake-3.11/Modules/FindProtobuf.cmake
问题描述
I try running a CMakeLists.txt on a Jenkins build server. The CMakeLists.txt with protobuf invocation looks like this:
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)
When running the CMakeLists on a Jenkins, following error is generated:
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 command:
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
我希望这会有所帮助,至少在我的情况下是这样。感谢米哈乌。
推荐阅读
- reactjs - Next.js 分块和延迟加载
- javascript - 当定位在另一个元素上时显示 img 元素的问题
- python - 使用 keydown 事件关闭 pygame 窗口并且标志不起作用
- hibernate - 在@Formula 中,引用此公式之外的连接依赖项(不是子选择,也不是此对象)
- reactjs - 使用 2 个单独的项目捕获 Windows 身份验证(凭据)。React 前端和 .NET Core 后端
- swiftui - 如何在swiftui中进行下拉
- typescript - 允许一个属性使用不同的 Typescript 类型
- selenium - 如何在黄瓜特征文件表中提供文件路径
- android - 将事件侦听器与其他类 android 的上下文一起使用
- optimization - How to optimize 2 identical kernels with 50% occupancy that could run concurrently in CUDA?