SQLite и googletest идут с очень простой в использовании, однофайловой версией, которая делает его бризом для использования его в других проектах, поскольку просто необходимо добавить единственный исходный файл. Они оба используют доморощенные инструменты для создания объединенного исходного файла, поэтому интересно, существует ли более универсальный инструмент для этого? Это должно взять список реализации/заголовочных файлов и выложить объединенный заголовок/источник и договориться, локальное включает. Все хорошо, если это не обрабатывает условное выражение, включает/включает с различным #defines
перед ними как Повышение. Tuple/MPL использует их. Типичная целевая библиотека была бы чем-то как ICU.
Это может быть интересно в ICU, который в некоторых случаях имеет несовместимые определения / включает и смеси C и C ++, а также ряд сгенерированных файлов. . Может быть, дайте нам знать, как это происходит?
(раскрытие: разработчик icu)
Если ваши include определены правильно (то есть, во всех заголовочных файлах есть защитники, и каждый заголовок/единица кода содержит все include, которые ему требуются), то вы можете сделать это "наполовину вручную". Найдите включения системных заголовков и закомментируйте их, затем создайте заголовок, который просто включает все в произвольном порядке, предварительно обработайте заголовок (в gcc это будет gcc -E
), а затем аналогично действуйте с кодовыми единицами.
Такой ручной подход может быть громоздким, но если вам нужно сделать это только один раз, то все будет в порядке. Опять же, даже если объединение заголовочных файлов может иметь смысл, я предпочитаю этого не делать. Я бы вообще оставил файлы отдельно, а если вы чувствуете, что вам нужно упростить доступ к ним, создайте пакетные заголовки, которые просто включают другие. Это подход, который используют некоторые библиотеки boost, где вы можете включить детали того, что вам нужно, или один заголовок, включающий все остальное. Код может быть скомпилирован/связан в статическую библиотеку и использован, как если бы это был один элемент.