После некоторого чата для получения контекста, я думаю, что этот вопрос - просто недоразумение cpp для разбора разных языков.
Я не знаю, как переносимый -x (или какФормат вывода portable -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
Возвращенный порядок - это порядокпоиск, однако <> includes пропускает пути для "" включает (но "" включает делает поиск <> пути).Здесь вывод cpp различает два набора путей, если вам это нужно.