【问题标题】:Clang failing to find header files in non-standard locationClang 无法在非标准位置找到头文件
【发布时间】:2021-08-31 15:01:54
【问题描述】:

我目前正在尝试构建 OpenPose。首先,我将尝试描述环境,然后描述由此产生的错误。 Caffe 是从源代码构建的,它完全位于 [/Users...]/openpose/3rdparty 而不是通常的位置(出于隐私考虑,我在这篇文章中编辑了文件路径的某些部分)。它的所有包含文件都可以在 [/Users...]/openpose/3rdparty/caffe/include/caffe 中找到。输入此命令后:

make -j`sysctl -n hw.logicalcpu` CXXFLAGS=-I[/Users/..]/openpose/3rdparty/caffe/include

随后出现此错误:

[  0%] Building CXX object src/openpose/CMakeFiles/openpose.dir/core/arrayCpuGpu.cpp.o
[  1%] Building CXX object src/openpose/CMakeFiles/openpose.dir/face/faceExtractorCaffe.cpp.o
[  1%] Building CXX object src/openpose/CMakeFiles/openpose.dir/hand/handExtractorCaffe.cpp.o
[  2%] Building CXX object src/openpose/CMakeFiles/openpose.dir/net/bodyPartConnectorCaffe.cpp.o
[  2%] Building CXX object src/openpose/CMakeFiles/openpose.dir/net/maximumCaffe.cpp.o
[  2%] Building CXX object src/openpose/CMakeFiles/openpose.dir/net/netCaffe.cpp.o
[  2%] Building CXX object src/openpose/CMakeFiles/openpose.dir/net/netOpenCv.cpp.o
[  2%] Building CXX object src/openpose/CMakeFiles/openpose.dir/net/nmsCaffe.cpp.o
[/Users/..]/openpose/src/openpose/core/arrayCpuGpu.cpp:3:14: fatal error: 'caffe/blob.hpp' file not found
    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/core/arrayCpuGpu.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
[/Users/etc..]/openpose/src/openpose/net/maximumCaffe.cpp:3:14: fatal error: 'caffe/blob.hpp' file not found
    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
1 error generated.
[/Users..]/openpose/src/openpose/net/nmsCaffe.cpp:3:14: fatal error: 'caffe/blob.hpp' file not found
    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
[/Users..]/openpose/src/openpose/net/netCaffe.cpp:6:14: fatal error: 'caffe/net.hpp' file not found
    #include <caffe/net.hpp>
             ^~~~~~~~~~~~~~~
[/Users..]/openpose/src/openpose/net/netOpenCv.cpp:7:14: fatal error: 'caffe/net.hpp' file not found
    #include <caffe/net.hpp>
             ^~~~~~~~~~~~~~~
[/Users..]/openpose/src/openpose/net/bodyPartConnectorCaffe.cpp:3:14: fatal error: 'caffe/blob.hpp' file 1not error  generatedfound.

    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/net/maximumCaffe.cpp.o] Error 1
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/net/nmsCaffe.cpp.o] Error 1
[/Users..]/openpose/src/openpose/face/faceExtractorCaffe.cpp:3:14: fatal error: 'caffe/blob.hpp' file not found
    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
[/Users..]/openpose/src/openpose/hand/handExtractorCaffe.cpp:3:14: fatal error: 'caffe/blob.hpp' file not found
    #include <caffe/blob.hpp>
             ^~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/net/netCaffe.cpp.o] Error 1
1 error generated.
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/net/bodyPartConnectorCaffe.cpp.o] Error 1
1 error generated.
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/net/netOpenCv.cpp.o] Error 1
1 error generated.
1 error generated.
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/face/faceExtractorCaffe.cpp.o] Error 1
make[2]: *** [src/openpose/CMakeFiles/openpose.dir/hand/handExtractorCaffe.cpp.o] Error 1
make[1]: *** [src/openpose/CMakeFiles/openpose.dir/all] Error 2
make: *** [all] Error 2

为什么 clang 找不到 blob.hpp 和其他头文件?我希望它导航到 openpose/3rdparty/caffe/include,然后从那里找到 caffe/blob.hpp 以及其他标题。我对 make/c++ 还是很陌生,所以除了将 CXXFLAGS 直接添加到 Makefile 中而不是通过终端传递它(没有用)之外,我没有尝试过很多事情。 这是 Makefile:https://pastebin.com/yY7R9jVe

【问题讨论】:

    标签: c++ makefile cmake header-files compiler-flags


    【解决方案1】:

    您正在使用 cmake。 cmake 生成的 makefile 不符合“标准”makefile 约定;特别是他们不使用CXXFLAGS 变量。

    当您使用 cmake 时,您不需要通过更改 make 的调用来修改编译器选项。相反,您应该通过编辑 CMakeLists.txt 文件或向用于生成 makefile 的 cmake 命令行提供覆盖值来修改编译器选项。

    【讨论】:

    • 好吧,在我导出 CXXFLAGS,用 cmake 重新编译,然后再次运行 make 之后,一切都完美地构建了。谢谢!
    • 另一个cmake 提示:您可以将VERBOSE=1 添加到make 命令行(这个确实在make 命令行上!)要求makefile 向您显示所有编译器命令等。而不是隐藏它们。这对于了解编译器是否以及以什么顺序接收选项很有用。
    猜你喜欢
    • 2021-09-18
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    相关资源
    最近更新 更多