C++ Make show include 在哪里搜索文件

Posted

技术标签:

【中文标题】C++ Make show include 在哪里搜索文件【英文标题】:C++ Make show where include is searching for files 【发布时间】:2013-07-17 03:07:41 【问题描述】:

我正在尝试使用 cmakemake 编译库的一部分。当我运行 Make 时,我收到错误提示:包含失败:

/home/user/Sean/PCL/pcl/apps/src/face_detection/openni_face_detection.cpp:9:57: fatal error: pcl/apps/face_detection/openni_frame_source.h: No such file or directory compilation terminated.

我知道使用gcc,您可以让编译器读取它在哪里寻找包含,但是有没有办法使用makecmake 来完成此操作。

【问题讨论】:

只需将正确的 arg 传递给 makefile 中的 gcc? 我没有看到我的 makefile 中调用了 gcc。另外,我是否必须确保通过 cmake 添加?在这里让我感到困惑的是双层抽象,尽管我很可能从错误的方向来处理这个问题。 【参考方案1】:

如果Makefile是由CMake自动生成的,你可以像这样启动make

> make VERBOSE=1

将目标的进程与正在执行的实际命令make 交错。 从这些命令中,您应该能够提取当前的包含路径。

您可能还想看看include_directories CMake 命令, 以防某些包含路径丢失。

【讨论】:

【参考方案2】:

我正在使用 mingw32 在 SUSE Linux 上交叉编译 Win32 目标。传统的详细/调试选项均未提供 #include 搜索路径。

这迫使我(懒惰的)手手动重现最终显示头搜索路径的编译操作。

简要说明...

运行make 操作并记下它正在执行的编译器目录命令行。是的,这很混乱,但并非不可能。如果无头,则将输出捕获到文件中。 进入目录 使用--help 选项执行编译器。记下它的 verbose 选项。 运行指定详细选项的编译命令。

这就是我得到的...

#include "..." search starts here:
#include <...> search starts here:
 /home/me/rpmbuild/BUILD/the-app-0.0.0/core/src/win32/include
 /home/me/rpmbuild/BUILD/the-app-0.0.0/core/src/win32/compat/include
 /home/me/rpmbuild/BUILD/the-app-0.0.0/core/src
 /home/me/rpmbuild/BUILD/the-app-0.0.0/core/src/win32/generic
 /home/me/rpmbuild/BUILD/the-app-0.0.0/core/src/win32/filed
 /usr/lib64/gcc/x86_64-w64-mingw32/8.2.0/include/c++
 /usr/lib64/gcc/x86_64-w64-mingw32/8.2.0/include/c++/x86_64-w64-mingw32
 /usr/lib64/gcc/x86_64-w64-mingw32/8.2.0/include/c++/backward
 /usr/lib64/gcc/x86_64-w64-mingw32/8.2.0/include
 /usr/lib64/gcc/x86_64-w64-mingw32/8.2.0/include-fixed
 /usr/x86_64-w64-mingw32/sys-root/mingw/include
End of search list.

还不错……

顺便说一句,这是一个 cmake 3.5.2 配置。

【讨论】:

使用 Windows 上的 MinGW,您还可以检查 CMakeFiles 目录中的 flags.txt 文件。 很高兴知道,@André -- 我应该提到构建结构是 rpmbuild 操作的结果。

以上是关于C++ Make show include 在哪里搜索文件的主要内容,如果未能解决你的问题,请参考以下文章

不能在使用 make 和 g++ 构建的代码中使用 std::filesystem

C++ 复制指针所指向的对象 make_shared shard_ptr

C++中tuple的使用

CAF(C++ actor framework)(序列化之类,无需序列化,直接传)

VS2010上 C++ multimap容器 运行时出错

C++中tuple的使用