En corto No. 2 – Tips de cmake

Si programas algo más complejo que un Hello World, es recomendable que tengas algún sistema para asistir en la compilación de tus programas; puede ser un makefile escrito a mano o, por ejemplo, un script de cmake.

En uno de mis proyectos recientes tengo algunos archivos de código fuente que son la base para un par de ejemplos. Mi script de cmake tenía las siguientes líneas:

ADD_EXECUTABLE (ejemplo-1 ${SOURCE_DIR}/ejemplo-1.c ${SOURCE_DIR}/base.c ${SOURCE_DIR}/extras.c)
ADD_EXECUTABLE (ejemplo-2 ${SOURCE_DIR}/ejemplo-2.c ${SOURCE_DIR}/base.c ${SOURCE_DIR}/extras.c)

Esto funciona pero noté que los archivos base.c y extras.c estaban siendo compilados dos veces cada que compilaba los programas, una vez para el ejecutable ejemplo-1 y otra vez para ejemplo-2. Normalmente esperaría que cada archivo sólo fuera compilado una vez pero al parecer eso no funciona así en cmake. En su lugar, para evitar compilar los archivos innecesariamente, se puede definir una librería temporal o de mentiras 😛 para que cada archivo sólo sea compilado una vez usando la instrucción ADD_LIBRARY con el modificador OBJECT. Por ejemplo:

ADD_LIBRARY(MI_LIBRERIA_DE_MENTIRAS OBJECT ${SOURCE_DIR}/base.c ${SOURCE_DIR}/extras.c)
ADD_EXECUTABLE (ejemplo-1 ${SOURCE_DIR}/ejemplo-1 $<TARGET_OBJECTS:MI_LIBRERIA_DE_MENTIRAS>)
ADD_EXECUTABLE (ejemplo-2 ${SOURCE_DIR}/ejemplo-2 $<TARGET_OBJECTS:MI_LIBRERIA_DE_MENTIRAS>)

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s