I intentado hacer algo similar a How to make two different source directories in a Makefile output to one bin directory?, así que tengo estos archivos (en relación con mi raíz del proyecto):-hacer ERL recompilar los archivos cuando se cambian las macros
Emakefile:
% EMakefile
% -*- mode: erlang -*-
{["src/*", "src/*/*", "src/*/*/*"],
[{i, "include"}, {outdir, "ebin"}, debug_info]}.
test/Emakefile:
% EMakefile
% -*- mode: erlang -*-
{["../src/*", "../src/*/*", "../src/*/*/*"],
[{i, "../include"}, {outdir, "../ebin"}, debug_info, {d, 'TEST'}]}.
Makefile:
EPATH=-pa ebin
all: before_compile
erl -make
all_test: before_compile
cd test
erl -make
cd ..
before_compile: mk_ebin copy_sqlite create_db copy_config copy_dot_app
test: all_test
erl -noshell $(EPATH) \
-s tests run \
-s init stop
rm -f ct.db
clean:
rm -fv ebin/*
... dependencies of before_compile
El problema es que la ejecución de make test
doesn No recompile ningún módulo que ya esté compilado con make
. Parece que erl -make
no importa que se hayan compilado sin TEST
definido, simplemente comprueba que los módulos sean más antiguos que los archivos de vigas. ¿Cómo lo obligo a recompilar (y evitar la recompilación cuando no es necesario)?
ACTUALIZACIÓN: Curiosamente, cuando se ejecuta inmediatamente después de make all_test
make clean
, parece que ./Emakefile
se utiliza en lugar de test/Emakefile
: Me estoy haciendo
Recompile: src/tests
Recompile: src/server_protocol_client
etc., y no hay pruebas en lugar de
Recompile: ../src/tests
Recompile: ../src/server_protocol_client
que obtengo al hacer cd test; erl -make
manualmente. ¿Alguna idea de por qué? De todos modos, lo he arreglado este problema mediante la eliminación y sustitución de test/Emakefile
all_test
en Makefile
:
all_test: before_compile
erl -noshell -eval "make:all([{d, 'TEST'}])." -s init stop