C++: создание одного файла без включений

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

Зачем? Для конкурса, в котором у компилятора нет некоторых библиотек, которые я использую, и в которых вы можете отправить только один единственный файл cpp.

В идеале этот "скрипт" должен создавать файл, который использует только то, что действительно нужно, а не просто рекурсивно копировать и вставлять все "#include".

Я уверен, что препроцессор генерирует некоторые файлы, когда вы добавляете "#include" в коде. Итак, как я могу увидеть эти промежуточные и (возможно, очень длинные) файлы?

1 ответ

  • GCC обеспечивает -E опция, поэтому она останавливается после предварительной обработки файлов. В документации есть больше опций, которые можно применить к препроцессору.

  • лязг также принимает -E, как указано здесь.

  • Visual Studio предоставляет переключатель компилятора /P (Preprocess to a File). Он инструктирует компилятор:

    Предварительно обработайте исходные файлы [es] C и C++ и запишите [s] предварительно обработанный вывод в файл.

    Вывод записывается в файл с именем файла на основе исходного файла с расширением.i. Чтобы указать другое имя файла, используйте параметр компилятора /Fi (Preprocess Output File Name).

  • Компилятор Intel C++ остановится после предварительной обработки, если вы передадите -E опция (вывод на stdout) или же -P (выводит в файл). На Windows это будет /E а также /P переключается соответственно. В руководстве есть больше информации об этом.

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