Automake generando binarios a bin / en lugar de en src/


Busqué la respuesta a esta pregunta pero no pude encontrar nada bueno. Tal vez son viejos y algo ha cambiado, así que pregunto de nuevo.

Tengo una estructura de directorios como:

Mi_proyecto

  • Src

  • Bin

Quiero que, cuando hago en el directorio raíz, los binarios se ponen en ./bin, en lugar de estorbar ./ src. ¿Pero cómo?

EDITAR: Estoy usando C++. Mi Makefile.am no tiene nada especial. Solo el bin_PROGRAM y _SOURCES variable.

Cuando corro make, los binarios generados se ponen en./ src. Simplemente quiero que entren ./recipiente.

Author: Vitor Baptista, 2010-01-26

3 answers

Aquí tienes una idea equivocada.

Tu árbol de construcción está donde sea que corras configure. Así es como autoconf está diseñado para funcionar. Los usuarios de su paquete (que no quieren desordenar su árbol de fuentes) esperarán que funcione de esta manera.

Este enfoque es una solución más general con mucha más flexibilidad que la organización que estás imaginando. Por ejemplo, no es terriblemente inusual querer mantener fuentes y construir archivos en sistemas de archivos separados.

 31
Author: Braden,
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-02-14 07:06:16

Automake no funciona muy bien si intenta configurar sus directorios de una manera diferente de lo que espera. Lo que usted desea implicaría escribir reglas adicionales para mover los binarios a ../bin después de compilarlos, lo cual es innecesariamente complicado.

Si no quieres desordenar tu directorio de fuentes, prueba esto:

cd my_project
mkdir build
cd build
../configure
make

Que pondrá todos los archivos generados (como makefiles, binarios, archivos objeto) en subdirectorios de my_project/build.

 21
Author: ptomato,
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-27 09:33:44

Una forma de decirle a Automake que cree binarios en un determinado directorio es agregar este directorio directamente al nombre en la variable "bin_PROGRAMS".

Considere el siguiente src / Makefile. am:

bin_PROGRAMS = foo
foo_SOURCES = ...
foo_CPPFLAGS = ...
foo_LDFLAGS = ...

Crea un binario" src/foo", pero puede decirle a Automake que use las fuentes en src para crear un binario"bin / foo":

bin_PROGRAMS = $(top_builddir)/bin/foo
__top_builddir__bin_foo_SOURCES = ...
__top_builddir__bin_foo_CPPFLAGS = ...
__top_builddir__bin_foo_LDFLAGS = ...

Lo probé con algunos paquetes e incluso "make distcheck" se lo traga. Sin embargo, no puede ser un gran truco...

 14
Author: Niels Lohmann,
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-02-05 08:36:34