Подтвердить что ты не робот

Инструмент для создания объединения/объединения всех исходных файлов библиотеки в один для C/С++?

SQLite и googletest поставляются с очень простой в использовании версией с одним файлом, которая позволяет легко использовать ее в других проектах, так как вам просто нужно добавить один исходный файл. Оба из них используют инструменты home- brew для создания комбинированного исходного файла, поэтому я задаюсь вопросом, есть ли для этого более общий инструмент? Он должен взять список файлов реализации/заголовков и выплюнуть объединенный заголовок/источник, а также исправить локальное включение. Я в порядке, если он не обрабатывает условные включает/включает с различными #defines перед ними, как Boost.Tuple/MPL использует их. Типичная целевая библиотека будет чем-то вроде ICU.

4b9b3361

Ответ 1

Если ваши включения правильно определены (то есть во всех файлах заголовков есть защитники, а каждый блок заголовка/кода содержит все, что требуется), вы можете сделать это "наполовину вручную". Локальный заголовок системы включает в себя и комментирует их, а затем создает заголовок, который включает только все в произвольном порядке и препроцесс заголовка (в gcc, который будет gcc -E), а затем работает аналогично с блоками кода.

Этот ручной подход может быть громоздким, но если вам нужно только сделать это, как только все будет в порядке. Опять же, даже если слияние файлов заголовков может иметь смысл, я предпочитаю не делать этого. Я бы фактически оставил файлы отдельными, и если вам кажется, что вам нужно упростить доступ к нему, поставьте заголовки пакетов, которые просто включают другие. Это подход, который берут некоторые дополнительные библиотеки, где вы можете включать в себя детали того, что вы хотите, или один заголовок, который включает в себя все остальное. Код можно скомпилировать/связать в статическую библиотеку и использовать как если бы это был единственный элемент.

Ответ 3

Это может быть интересным в ICU, который в некоторых случаях несовместимо определяет/включает в себя и смеси C и С++ и несколько сгенерированных файлов. Может быть, дайте нам знать, как это происходит?

(раскрытие: разработчик icu)