2010-04-27 10 views
17

SQLite y googletest vienen con una versión de un solo archivo, muy fácil de usar, que hace que usarlo en otros proyectos sea muy sencillo, ya que solo necesita agregar un único archivo fuente. Ambos usan herramientas caseras para crear el archivo fuente combinado, así que me pregunto si hay una herramienta más genérica para esto. Debería llevar una lista de archivos de cabecera/implementación y escupir un encabezado/fuente combinado, y arreglar los includes locales. Estoy bien si no maneja inclusiones/inclusiones con diferentes #defines antes de ellas como Boost.Tuple/MPL las usa. Una biblioteca objetivo típica sería algo así como ICU.¿Herramienta para crear una amalgama/combinar todos los archivos fuente de una biblioteca en uno para C/C++?

+0

¿Qué sistema operativo? –

+0

Windows o Linux, preferiblemente ambos. Estoy bien, sin embargo, si la herramienta se ejecuta solo en uno de ellos. – Anteru

Respuesta

3

Si sus inclusiones están definidas correctamente (es decir, hay protecciones en todos los archivos de encabezado, y cada unidad de encabezado/código contiene todo lo que necesita), puede hacerlo "a medias". Ubique el encabezado del sistema incluye y coméntelos, luego cree un encabezado que simplemente incluya todo en cualquier orden aleatorio y preprocesé el encabezado (en gcc que sería gcc -E) y luego opere de manera similar con las unidades de código.

Este enfoque manual puede ser engorroso, pero si solo tiene que hacerlo una vez, todo estará bien. Por otra parte, incluso si fusionar los archivos de cabecera puede tener sentido, prefiero no hacerlo. En realidad, dejaría los archivos por separado, y si siente que necesita simplificar el acceso a él, proporcione encabezados de agrupación que solo incluyan los demás. Este es el enfoque que toman algunas bibliotecas de impulso, donde puede incluir los detalles de lo que desea o un solo encabezado que incluye todo lo demás. El código se puede compilar/vincular en una lib estática y se puede usar como si fuera un elemento único.

1

Esto podría ser algo interesante en la UCI, que tiene, en algunos casos, incompatibilidades define/incluye y mezclas de C y C++ y una cantidad de archivos generados. ¿Tal vez nos dejen saber cómo va?

(divulgación: desarrollador UCI)

Cuestiones relacionadas