【问题标题】:How to know which headers are included without looking at the preprocessed code in GCC?如何在不查看 GCC 中的预处理代码的情况下知道包含哪些标头?
【发布时间】:2010-11-06 03:47:52
【问题描述】:

我有一些大的 C 程序,我想知道当我编译这个程序时,实际上包含了哪些头文件...

最简单的解决方案是打印预处理代码并查看,但您知道是否有一种方法可以编译并同时显示包含哪些头文件?

【问题讨论】:

    标签: c gcc c-preprocessor compiler-options


    【解决方案1】:

    增加 gcc 的详细程度,然后通过自己制作的过滤程序运行它?

    【讨论】:

      【解决方案2】:

      您可以使用-MD 选项 - 有关详细信息,请参阅man gcc

      【讨论】:

        【解决方案3】:

        使用 gcc -M 或 gcc -MM。如果您愿意,可以使用 sed 调整输出。如果你使用 GNU make(你应该),你可以把它包装成一个整洁的命令。

        【讨论】:

          【解决方案4】:

          使用-M option 输出依赖项。使用-MD 生成编译。使用 -MF 重定向到文件。

          还 -MM 允许忽略依赖项列表中的系统文件。

          gcc ... -M  -MF <output_file>     # generate dependencies
          gcc ... -MD -MF <output_file>     # compile and generate dependencies
          

          【讨论】:

          • 但来自手册:将 -M 传递给驱动程序意味着 -E,并使用隐式 -w 抑制警告。所以程序实际上并没有编译
          • 是的,你必须使用-MD来编译同时生成依赖。
          • 这几天(不知道2009年有没有申请),你也可以用-H。这会在层次结构中显示头文件,因此您可以看到哪个头包含哪些其他头,到任意深度。这有时可以提供信息——特别是如果您的项目直接在#include 行中或通过命令行上的-I 选项使用../somedir/someheader.h 符号。同一个文件可以包含在多个不同的路径中。
          猜你喜欢
          • 1970-01-01
          • 2016-01-21
          • 2019-07-20
          • 2013-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-16
          • 2023-04-08
          相关资源
          最近更新 更多