【问题标题】:list of all header files included by a C fileC 文件包含的所有头文件的列表
【发布时间】:2013-04-12 16:08:31
【问题描述】:

我正在尝试“武装”编译一个 C 文件,它递归地包含许多头文件..我正在尝试查找这些头文件的列表..有没有更简单的方法来查找所有头文件的列表它包含的文件?

【问题讨论】:

标签: c++ c


【解决方案1】:

您可以使用带有选项的 GCC C 预处理器来转储递归包含的标头列表:

cpp -M

这将显示所有包含的标题。

您可能需要为其提供常规构建中使用的所有包含目录的根目录。迭代运行它,添加更多包含路径,直到错误停止。

此用法中该命令的完整形式为:

cpp -M [-I include_directory *] path_to_c_file.c

【讨论】:

  • 这又适用于哪个工具链?
  • 啊,谢谢!我对gcc -Mg++ -Mcpp 命令很熟悉,这个特定的选项对我来说是新的。它是否也跟踪递归包含的文件?忘了这个,我知道它是独立的预处理器......
  • 如果您不想看到系统标头,请将-M 选项替换为-MM
  • 如何列出 -MM 输出??
【解决方案2】:

根据http://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html#Preprocessor-Options,-H 和 -M 选项可用于此目的。

另一个选择是使用http://www.doxygen.nl/ 并生成项目的文档,之后您可以检查它以查看文件依赖关系:),这是首选,因为它支持多种语言:C、C++、Objective-C、C#、 PHP、Java、Python、IDL(Corba 和 Microsoft 风格)、FORTRAN、VHDL、Tcl。

【讨论】:

    【解决方案3】:

    大多数编译器都有开关,使它们只对文件进行预处理。他们将所有#include 扩展为实际代码意味着什么。通常它们确实在原始包含行中包含注释(正确的 C 注释)。因此,您可以在生成的预处理代码中搜索所有此类 cmets 以收集所有包含的标头。

    【讨论】:

    • 通常不是注释,而是#line 指令。
    • 另外:开关通常是-E(或/E)。
    猜你喜欢
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    相关资源
    最近更新 更多