1

我正在编写 C 预处理器的实现,在 Linux 上运行时,它需要知道查找头文件的路径。这可以通过运行来获得gcc -v。我想将结果编译到我的预处理器的二进制文件中,而不是gcc -v在每次运行时都调用,所以我目前正在考虑编写一个 Python 脚本在编译时运行,它将获取路径并将其写入一个小的要包含在构建中的 C 源文件。

另一方面,我的印象是 GNU Autotools 基本上是获取系统特定信息以在构建时使用的专家。Autotools 是否有能力以#include可以将其作为字符串合并到正在构建的程序中的方式获取路径(而不是用于构建过程)?如果是这样,怎么做?

4

2 回答 2

4

如果要获取include/GCC 使用的内部目录,请运行gcc -print-file-name=include命令,例如在 shell 语法中

the_gcc_include_dir=$(gcc -print-file-name=include)

$the_gcc_include_dir目录包含文件<stdarg.h><stddef.h>许多其他文件。

你还想要include-fixed/目录,所以

the_gcc_include_fixed_dir=$(gcc -print-file-name=include-fixed)

$the_gcc_include_fixed_dir包含类似的文件<limits.h>,也是有用的README

在您的情况下,您可能不需要自动工具

于 2013-07-30T09:35:08.423 回答
0

我最终用 Python 脚本解析了 gcc 的包含路径:

print 'string gcc_include_path[] = {'
for s in sys.stdin:
    if s[0] == ' ':
        s = s.strip()
        print '\t"'+s+'",'
print '};'

并从 Makefile 调用它:

echo | cpp -Wp,-v 2>&1 >/dev/null | python include_path.py >include_path
于 2013-08-01T04:26:09.193 回答