經過一些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