Создание одного файла C при компиляции нескольких источников - PullRequest
2 голосов
/ 12 мая 2011

У меня есть набор файлов C для компиляции с использованием gcc и make. Процесс сборки работает нормально. Я хочу знать, смогу ли я получить - во время компиляции - один C-файл, содержащий весь исходный код без какого-либо макроса препроцессора.

Ответы [ 4 ]

2 голосов
/ 12 мая 2011

Один простой способ - создать файл, содержащий все остальные исходные файлы.

$cat *.c > metafile.c

Это создаст такой файл, в зависимости от того, как вы установили «прагму один раз», и если этот файл ifndef, вероятно, не сможет скомпилироваться самостоятельно.

С другой стороны, если то, что вы хотите в файле, где все макросы препроцессора были развернуты и оценены, то ответом будет добавить следующее в gcc:

-save-temps

тогда файл .ii будет содержать развернутые и оцененные макросы

1 голос
/ 12 мая 2011

Если вы включаете все файлы в компилятор gcc одновременно, вы можете использовать

gcc -E main.c other.c another.c

Это также будет включать функции stdlib, возможно, используйте -nostdinc

0 голосов
/ 12 мая 2011

Вы можете использовать опцию -save-temps для получения промежуточных выходов.Однако это будет один выходной файл на исходный файл.Каждый исходный файл компилируется отдельно и представляет собой единицу компиляции, которая не может быть перепутана.
Вы также можете использовать опцию -E, однако она будет запускать только препроцессор и не будет продолжать компиляцию.

0 голосов
/ 12 мая 2011

Вы не можете - обычно вы вызываете компилятор для компиляции только одного исходного файла, в результате чего получается объектный файл. Позже вы вызываете компоновщик для всех объектных файлов, чтобы создать исполняемый файл - у него нет исходного исходного кода C.

Однако вы можете создать отдельный сценарий оболочки, который вызывает gcc с опцией -E, просто для предварительной обработки исходных файлов, а затем с помощью утилиты cat собрать все источники в одном файле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...