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
переключается соответственно. В руководстве есть больше информации об этом.