我正在编写C预处理器的实现,当在Linux上运行时,需要知道查找头文件的路径。这可以通过运行gcc -v
来获得。我想将结果编译到我的预处理器的二进制文件中,而不是每次运行都要调用gcc -v
,所以我现在正在考虑编写一个Python脚本,以便在编译时运行,这将获得路径和将它写入一个小的C源文件,以包含在构建中。
另一方面,我得到的印象GNU Autotools基本上是获取在构建时使用的系统特定信息的专家。 Autotools是否能够以这样的方式获取#include
路径,使其可以作为字符串合并到正在构建的程序中(而不是用于构建过程)?如果是这样,怎么样?
答案 0 :(得分:4)
如果要获取GCC使用的内部include/
目录,请运行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
您可能不需要 autotools 。
答案 1 :(得分:0)
我最终用Python脚本解析了gcc的include路径:
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