Понимание раздела помощи C++

Вопрос или проблема

Понимание раздела помощи C++

Я понимаю, что тот, кто написал программу, также написал раздел помощи, объясняющий, что делает каждый аргумент, который можно передать. Если я введу g++ --help, я получу описание множества опций “в моем случае я смотрю на /usr/bin/arm-none-eabi-g++ --help“, но они оба выглядят довольно похоже.

У меня есть вывод, сгенерированный CMake, который я пытался разобрать и понять, иногда пути указываются с помощью -I, а иногда -isystem.

/usr/bin/arm-none-eabi-g++
“-I${PICO_SDK_PATH}/src/rp2_common/pico_atomic/include”
-isystem “${PICO_SDK_PATH}/src/common/pico_stdlib_headers/include” \

Есть ли какая-то разница?

Почему я не вижу ни -I, ни -isystem, ни -D в описании –help?

В начале –help написано:

–target-help Показать специфические для цели параметры командной строки (включая параметры ассемблера и компоновщика).

–help={common|optimizers|params|target|warnings|[^]{joined|separate|undocumented}}[,…].

Я не понимаю, как открыть и просмотреть эту подсекцию помощи --help=, чтобы увидеть, объясняется ли это в подтемах.

На самом деле я не уверен, почему текст --help не содержит описания этих ключей. Я могу только догадываться, что они настолько стары и известны, что человек, написавший список опций для --help, не счел нужным их включать? Можно было бы ожидать, что они будут в основных разделах --help или --help=common, но, увы.

Но они включены в полную документацию:
https://gcc.gnu.org/onlinedocs/

Из полного списка вы можете перейти к более специфичным, и, например, разница между -I и -isystem описана здесь: https://gcc.gnu.org/onlinedocs/gcc-14.2.0/gcc/Directory-Options.html

Ответ или решение

Вы правильно понимаете, что секция помощи (help) любой программы, в том числе компилятора g++, содержит информацию о доступных параметрах и аргументах. Когда вы вводите команду g++ --help или arm-none-eabi-g++ --help, вы видите список опций, которые могут быть использованы с компилятором, но, как вы заметили, не все параметры, такие как -I, -isystem или -D, могут быть упомянуты в выводе.

Различия между -I и -isystem

-I и -isystem используются для указания каталогов, где компилятор должен искать заголовочные файлы, но между ними есть важные различия:

  • -I (глобальный путь): Этот параметр добавляет указанный каталог к списку мест, где компилятор будет искать заголовочные файлы. При этом порядок поиска включает как указанный каталог, так и стандартные системные каталоги, после чего система может выдать предупреждения, если в этих заголовках будут обнаружены какие-либо проблемы.

  • -isystem (системный путь): Этот параметр также добавляет каталог для поиска заголовков, но в этом случае каталоги, прописанные с помощью -isystem, имеют приоритет. Более того, компилятор не будет выдавать предупреждения о проблемах в заголовках, найденных в -isystem, что может быть полезно при работе с библиотеками, где вы не хотите, чтобы предупреждения от стандартных заголовков мешали компиляции.

Почему параметры не упоминаются в --help

Причина, по которой опции как -I, -isystem и -D могут отсутствовать в выводе --help, может быть связана с их "классическим" статусом и тем фактом, что они давно известны в среде разработчиков. Возможно, подразумевалось, что пользователи, использующие эти параметры, должны знать о них из других источников или документации.

Доступ к разделу под-справки

Вы можете получить дополнительную информацию о параметрах компилятора с помощью --help=.... Например, вы можете попробовать следующие команды:

  • g++ --help=common — чтобы получить информацию о общих параметрах.
  • g++ --help=target — для информации о параметрах, специфичных для целевой архитектуры.

Эти команды позволят вам увидеть более детализированные подкатегории помощи.

Можно также обратиться к полному руководству по G++. Полная документация доступна здесь, где вы можете найти все параметры и их описание.

Чтобы более детально изучить разные опции, включая различия между -I и -isystem, вы можете ознакомиться с данной страницей документации: Directory Options.

Надеюсь, это поможет вам лучше понять различия в параметрах и как пользоваться документацией компилятора!

Оцените материал
Добавить комментарий

Капча загружается...