2010-10-07 5 views
5

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_testmake 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/Emakefileall_test en Makefile:

all_test: before_compile 
    erl -noshell -eval "make:all([{d, 'TEST'}])." -s init stop 

Respuesta

3
all_test: before_compile 
    cd test 
    erl -make 
    cd .. 

Esto es incorrecto. Cada línea produce su propio proceso. Hacer tal:

all_test: before_compile 
    cd test; \ 
    erl -make 
Cuestiones relacionadas