Ответ 1
Команда
echo | gcc -E -Wp,-v -
покажет используемый путь include.
Я пытаюсь программно найти путь #include
в Linux, который, как я понимаю, на практике означает поиск того, что считает GCC. (Это правда, как это делает Кланг?)
В соответствии с http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html некоторые компоненты включают архитектуру ЦП и версию GCC; последнее, в частности, кажется сложным; Полагаю, что это можно было бы получить, запустив gcc --version
и проанализировав вывод (или gcc -v
), но это кажется неэлегантным в лучшем случае и хрупким в худшем случае. Выполнение этого из одного кода, предполагающего одну программу, скомпилировано с помощью GCC, может быть другой опцией, но это потребует в зависимости от этого предположения.
Какой рекомендуемый способ сделать это?
Команда
echo | gcc -E -Wp,-v -
покажет используемый путь include.
Я не уверен, что вы подразумеваете под рекомендованным способом поиска пути include. Стандартный способ приведен ниже (для c и С++):
$ `gcc -print-prog-name=cc1` -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/4.7/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
/usr/include
End of search list.
^C
$ `gcc -print-prog-name=cc1plus` -v
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.7/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/4.7
/usr/include/c++/4.7/x86_64-linux-gnu
/usr/include/c++/4.7/backward
/usr/lib/gcc/x86_64-linux-gnu/4.7/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
/usr/include
End of search list.
^C