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

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

17
задан Anteru 27 April 2010 в 07:11
поделиться

2 ответа

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

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

1
ответ дан 30 November 2019 в 14:43
поделиться

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

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

3
ответ дан 30 November 2019 в 14:43
поделиться