Возможно ли собрать си проект в один файл используя компилятор clang, с учётом того, что все файлы сторонних библиотек так же подключаются в виде файлов?
Возможно ли собрать си проект в один файл какими либо сторонними инструментами?
hitakiri, Если передать компилятору флаг -E, то он все include подставит. Потом надо будет получившиеся .c файлы руками собрать в один.
Но учтите, сторонние библиотеки, если вы их подключаете в виде хедеров, они все еще могут быть скомпилированны, и вы их в свой .c файл никак не вставите. При компиляции вашего с файла компилятору все еще надо будет указать, какие билиотеки надо слинковать.
Wataru, По библиотекам понятно. В принципе читал, что можно в #include "... .c" добавлять и "сишные" файлы. Просто думал, что есть какой-то "хак" для подобных операцый.
Благодарю за информацию.
hitakiri, Команда препроцессора #include просто добавляет в текущий файл указанный, если находит конечно, ей пофиг, что там. Задача непонятна, возможно у нее есть другое решение
Кот Абсолютный, Задача сделать единый .c файл из сторонней библиотеки. Нашел подходящее определение - amalgamation. Для примера.
Найдя определение процессу, нашел такую программу Amalgamate .
hitakiri, можно и сишные файлы включать #include но могут быть подводные камни. Например, static функции и глобальные переменные включаемого файла станут видны в "родительском" файле, что может привести к дублированию имён и, в лучшем случае, ошибке компиляции.
Если включаемые сишные файлы в свою очередь включают разные заголовочные .h то из-за изменённого порядка их включения тоже могут возникать разные чудеса.
В общем, хотелось бы понять, какая сверхзадача. Может быть нужно принципиально другое решение.
skyazimuth, Прочитал статью о том, что gcc намного лучше обрабатывает (не только более качественный код на выходе, но и более быстрая компиляция и выделение более сложных ошибок и предупреждений) код на C если он собран в один файл. Начал искать как безболезненно объединять файлы, потому и задал тут этот вопрос.
Выше я уже ответил, да есть термин amalgamation. Есть кривые проги для выполнения данной операции. Написал в итоге свою, т.к. сторонние мне были не удобны в использовании.
Надо понимать что этот подход работает для чистого C, ни разу не видел статей.исследований для других компилируемых языков.