在编译时在C ++中找到<included>文件的确切位置</included>

时间:2013-10-02 20:48:25

标签: c++ macos include

我正在编译包含glui.h的C ++文件。这又包括glut.h,如此:

#include <GLUT/glut.h>

我的C ++文件使用CMake和Makefile成功编译。

但是,我不确定是否包含glut.h的哪个副本。是否有可能在编译时发现我的计算机上找到GLUT/glut.h的位置?如果它有所不同,我在OSX 10.8下用g ++编译它。

(这显然有一个相对于OpenGL和GLUT的具体答案,但我特别想找到一个通用的答案,这将有助于我解决将来模棱两可的include

3 个答案:

答案 0 :(得分:4)

在编译时只需将-E标志添加到g ++ / gcc,您将获得预处理器输出,它将告诉您完整路径中包含哪些头文件。

答案 1 :(得分:2)

前几天我遇到了这个问题,并解决了这个问题:

$ gcc -E writefile.c | grep stdio.h
# 1 "/usr/include/stdio.h" 1 3 4
# 28 "/usr/include/stdio.h" 3 4
# 29 "/usr/include/stdio.h" 2 3 4
# 35 "/usr/include/stdio.h" 2 3 4
# 37 "/usr/include/stdio.h" 2 3 4
# 45 "/usr/include/stdio.h" 3 4
# 65 "/usr/include/stdio.h" 3 4
# 75 "/usr/include/stdio.h" 3 4
# 76 "/usr/include/stdio.h" 2 3 4

(显然,我在工作中寻找的文件不是stdio.h,但你明白了这一点。

答案 2 :(得分:1)

您可以使用pragma message来指示源文件位置以及其他诊断信息。

#pragma message "Using file at: " __FILE__