Когда я компилирую очень простой исходный файл с помощью gcc, мне не нужно указывать путь к стандартным включаемым файлам, таким как stdio или stdlib.
Откуда GCC знает, как найти эти файлы?
Есть ли /usr/include
внутри него путь, или он получит пути от других компонентов ОС?
cpp -v /dev/null -o /dev/null
Есть команда с более коротким выводом, которая позволяет автоматически вырезать включаемые пути из строк, начиная с одного пробела:
Заслуга принадлежит главной странице libc ++ .
источник
Хотя я согласен с ответом Игоря Кахарличенко о рассмотрении C ++ и с ответом abyss.7 о компактности его вывода, они все еще неполны для версий gcc, поскольку обработка ввода зависит от параметров командной строки и макросов.
Пример:
echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -specs=nano.specs -mcpu=cortex-m4 -march=armv7e-m -mthumb -mfloat-abi=soft -x c++ -E -Wp,-v\ - -fsyntax-only
доходностьтогда как
echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -x c++ -E -Wp,-v - -fsyntax-only
урожайностьПервый вызов использует
newlib
(см. Строки 1 и 3 вывода), второй идет со стандартными включениями. Общие файлы в конце списка являются примером использованияinclude_next
.Итог: всегда учитывайте все макросы и параметры компилятора при печати подключаемых каталогов.
источник
Просто запустите следующее, чтобы вывести список путей поиска по умолчанию:
источник
cc1
обычно не может быть вызван напрямую, потому что это внутренняя команда, которой нет в PATH. Возможно, вы захотите отредактировать свой ответ, чтобы описать, где найти файл.