经过一些chat来获取上下文,我认为这个问题只是对cpp解析不同语言的误解。
我不知道便携式-x是如何(或者便携式-v的输出格式是多少),尽管其他编译器可能有非常相似的东西(例如,我相信Intel的编译器在此处的行为相同),但似乎你只需要告诉你所使用的语言CPP为它包括它的语言相关的,内部配置的路径:
$ cpp --version # my cpp is from gcc
cpp (Ubuntu 4.4.3-4ubuntu5) 4.4.3
...
$ cpp -v </dev/null 2>&1 1>/dev/null | sed -nr 's/^ ([^ ]+)$/\1/p'
/usr/local/include
/usr/lib/gcc/i486-linux-gnu/4.4.3/include
/usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed
/usr/include/i486-linux-gnu
/usr/include
$ cpp -v -x c++ </dev/null 2>&1 1>/dev/null | sed -nr 's/^ ([^ ]+)$/\1/p'
/usr/include/c++/4.4
/usr/include/c++/4.4/i486-linux-gnu
/usr/include/c++/4.4/backward
/usr/local/include
/usr/lib/gcc/i486-linux-gnu/4.4.3/include
/usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed
/usr/include/i486-linux-gnu
/usr/include
这很好地衔接,当你的脚本需要具体项目包括路径:
$ mkdir my-include # or else cpp ignores it
$ cpp -Imy-include -v -x c++ </dev/null 2>&1 1>/dev/null | sed -nr 's/^ ([^ ]+)$/\1/p'
my-include
/usr/include/c++/4.4
/usr/include/c++/4.4/i486-linux-gnu
/usr/include/c++/4.4/backward
/usr/local/include
/usr/lib/gcc/i486-linux-gnu/4.4.3/include
/usr/lib/gcc/i486-linux-gnu/4.4.3/include-fixed
/usr/include/i486-linux-gnu
/usr/include
退回的订单是为了搜索,然而<>包括跳过“”的路径包括(但“”包括搜索路径)。在这里,cpp的输出确实可以区分两组路径,如果需要的话。
这似乎是cpp -v dev/null输出东西像“--with-gxx-include-dir =/usr/include/C++/4.4”,这是否有助于你的问题? – 2010-10-27 03:24:12
这取决于编译器,因语言而异(最显着的是C vs C++)。你打算如何处理在makefile中使用CPPFLAGS变量的项目?什么是你脚本的目的?(http://tinyurl.com/meta-xy) – 2010-11-09 16:27:45