【问题标题】:tracking down include files (include chain)追踪包含文件(包含链)
【发布时间】:2014-08-05 04:09:17
【问题描述】:

有时我想将包含文件跟踪到定义某种类型的行。 例如,在busybox中添加命令后,我发现添加的源包含内核头文件,其中包含其他头文件。但与linux构建过程不同,其中配置定义变量(CONFIG_...)用于选择正确的头文件(并在头文件中选择正确的行),在busybox构建中,这些变量没有设置,因此正在选择头文件我猜是任性的。

所以我想跟踪头文件,例如查看 u32 类型是如何进行 typedef 的,以及在构建过程中如何选择正确的头文件。如果我知道这一点,我可以在我的 busybox 构建过程中添加一些配置,以便为最终构建选择正确的 linux 头文件和行。

有没有什么有效的方法可以找到包含文件的包含路径?我尝试在制作 .o 文件时将 -M 添加到 CPPFLAGS 以查看包含哪些文件,但没有相关信息输出。

编辑:我使用 grep 查找文件类型定义然后更改每个候选文件的类型名以找到最终使用的头文件。然后使用 grep 查找包含该文件的文件。并更改包含文件名以了解真正的包含文件(由于更改的文件名,真正的包含文件在包含期间会出错。)。我重复了这一点,这样我就可以跟踪包含路径。也许这是唯一的方法?

【问题讨论】:

    标签: c linux include busybox


    【解决方案1】:

    要查看 typedef 名称的实际类型,您需要查看预处理器的输出:

    https://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html

    它在 gcc 上的选项是 -E。此输出还将包含头文件中的递归内容。

    【讨论】:

    • 感谢 Arun,关于 gcc -E 选项,我尝试过 make CFLAGS="-E" ARCH=sparc CROSS_COMPILE=sparc-abc-elf-drivers/usb/host/abc-hcd.o 但是在标准输出上看不到类型。我会试试的。
    猜你喜欢
    • 2012-02-13
    • 2016-05-17
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2020-12-04
    • 2016-12-06
    相关资源
    最近更新 更多