Pasar C / C++ #defines al makefile


Desarrollo C/C++ usando el IDE de Eclipse. Eclipse también genera un makefile que no quiero editar, ya que simplemente se sobrescribirá.

Quiero usar ese makefile para nightly build dentro de Hudson.

¿Cómo paso #define qué se hacen en el archivo de proyecto del IDE al makefile ? (¿y por qué Eclipse no los incluye ya en el makefile generado?)

En realidad tenía esto resuelto una vez, luego accidentalmente lo sobrescribí: - (Pero al menos sé que se puede hacer...

Author: Michael Donohue, 2010-01-11

4 answers

Si está ejecutando make desde la línea de comandos, use

make CPPFLAGS=-DFOO

Que añadirá-DFOO a todas las compilaciones. Vea también CFLAGS, CXXFLAGS, LDFLAGS en el manual make.

 30
Author: Scott Wales,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-20 23:42:45

Podría escribir un pequeño programa para incluir las cabeceras y escribir un fragmento de makefile que include en el makefile principal (requiere GNU make).

Esta es una solución bastante fea que requiere una buena cantidad de hackers a mano. Más elegante sería analizar el archivo de proyecto y escribir el fragmento makefile.

 2
Author: dmckee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-11 03:00:33

Para GCC use-D define.

OP comentó a continuación que quiere pasar la definición a make y que se la pase a GCC.

Make no permite esto. Por lo general, solo agrega otra regla make para agregar define. Por ejemplo 'make release' vs 'make debug'. Como creador de makefile, usted crea las dos reglas y tiene las definiciones en el archivo make. Ahora bien, si Eclipse no está poniendo las definiciones en el makefile por usted, yo diría que Eclipse está roto.

 1
Author: Gregor Brandt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-11 15:01:37

Si está utilizando autotools otra opción es tener 2 directorios 'bin/debug' y 'bin/release'.

# Simple bootstrap script.

# Remove previously generated filed and call autoreconf.
# At the end configure 2 separate builds.
echo "Setting up Debug configuration: bin/debug"
../../configure CXXFLAGS="-g3 -O0 -DDEBUG=1"
echo "Setting up Release configuration: bin/release"
cd bin/release/
../../configure CXXFLAGS="-O2"

Configurar Eclipse. Abra las propiedades del proyecto (Project- > Properties - > C / C++ Build- > Builder Settings) y establezca la Ubicación de compilación->Directorio de compilación en

${workspace_loc:/helloworld/bin/debug}

Reemplazando 'helloworld' con el directorio de su proyecto relativo al espacio de trabajo (o puede proporcionar una ruta absoluta {{/abs/path/debug}). Haga lo mismo con la configuración de Release, reemplazando" / debug "por" release" al final del camino.

Este método parece un desperdicio de espacio en disco, pero una alternativa válida para lograr compilaciones completamente separadas.

 1
Author: Plamen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-13 14:25:36