C++ Make show include 在哪里搜索文件
Posted
技术标签:
【中文标题】C++ Make show include 在哪里搜索文件【英文标题】:C++ Make show where include is searching for files 【发布时间】:2013-07-17 03:07:41 【问题描述】:我正在尝试使用 cmake
和 make
编译库的一部分。当我运行 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
,您可以让编译器读取它在哪里寻找包含,但是有没有办法使用make
和cmake
来完成此操作。
【问题讨论】:
只需将正确的 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