Использование clang или g++/gcc для печати предварительно обработанного кода без включения файлов из системных путей

В настоящее время я бы хотел отладить свои включения. Для этого я хочу получить предварительно обработанный код, но без файлов системных заголовков - только мой собственный код.

Я пробовал с флагом "-E" а также "-nostdinc". Но тогда я получаю ошибки, например<string>пропал, отсутствует. Как отключить такие ошибки предварительной обработки?

3 ответа

Решение

(На самом деле это не ответ - просто "взлом")

Чтобы решить эту проблему, я создал текстовый файл со всеми системными заголовками:

rem my GCC STL-PATH
cd Z:\usr\include\c++\10

dir /b > F:\DummySTL\files.txt

Затем я выполнил следующую строку кода:

for /f "delims=" %F in (files.txt) do copy nul "%F"

Это создает пустой текстовый файл для каждой строки в файле. Теперь я могу вызвать gcc или clang просто с помощью:

-isystem"F:\DummySTL"

Использование clang или g++/gcc для печати предварительно обработанного кода без включения файлов из системных путей

Это нелегко сделать с GCC. Прочтите о том, как вызвать GCC.

Но вы можете получить весь предварительно обработанный код, используяg++ -C -Eи используйте какой-нибудь скрипт (возможно, с GNU gawk) для удаления ненужных частей. Например, см. RefPerSys.

в настоящее время я бы хотел отладить свои включения.

У меня есть привычка генерировать весь предварительно обработанный код, а затем меньше использовать GNU, чтобы заглянуть внутрь него. Место на диске дешевое.

В качестве альтернативы подумайте о написании собственного плагина GCC, который сделает то, что вам нужно.

Как отключить такие ошибки предварительной обработки?

Вы можете создать набор файлов заголовков с именами, соответствующими заголовкам стандартной библиотеки. Поместите эти заголовки в каталог include. Пусть файлы будут пустыми.

Использование clang или g++/gcc для печати предварительно обработанного кода без включения файлов из системных путей

Я вижу два других подхода, помимо подхода с пустым заголовком:

  • Вместо использования полного препроцессора компилятора напишите свой собственный препроцессор, который выполняет только ту часть обработки, которую вы хотите.

  • Или напишите пост-препроцессор, который удаляет стандартное содержимое заголовка из предварительно обработанного результата.

Другие вопросы по тегам