【发布时间】:2020-07-23 11:00:48
【问题描述】:
我正在寻找一个简单的 bash 脚本,当给定系统标头的名称时,它将返回其完整路径,在 #include <header> 语句中将从该路径中读取它。我已经有了一个类似的东西来查找链接器使用的库存档。
ld -verbose -lz -L/some/other/dir | grep succeeded | sed -e 's/^\s*attempt to open //' -e 's/ succeeded\s*$//'
例如,这将返回 libz 存档的路径(/lib/x86_64-linux-gnu/libz.so 在我的系统上)。
对于请求的脚本,我知道我可以获取 gcc 使用的包含目录列表并自己搜索文件,但我正在寻找对预处理器内部发生的事情的更准确模拟(除非它是就这么简单)。
【问题讨论】:
-
I already have an analogous唯一类似的是“发现”部分.. -
构建一个包含标头的存根程序并运行
gcc -E,或者只是echo '#include <stdio.h>' | gcc -E - -
请注意,系统头文件(带有
<...>的头文件)不一定在磁盘上有物理文件。我相信gcc实现只有系统头文件作为磁盘上的文件,但谁知道他们是否会在未来的版本中改变它?或者如果你切换编译器?也许您想要实现的目标可以在不知道系统标头的位置(或物理存在)的情况下完成?
标签: c bash gcc compilation preprocessor-directive