2010-10-07 13 views
5

Starałem się zrobić coś podobnego do How to make two different source directories in a Makefile output to one bin directory?, więc mam te pliki (w stosunku do mojego korzenia projektu):Zmuszanie ERL -make przekompilować pliki gdy makra są zmieniane

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 

Problemem jest to, że działa make test robi Rekompiluj wszystkie moduły, które są już skompilowane z make. Wydaje się, że erl -make nie obchodzi, że zostały one skompilowane bez zdefiniowania TEST, po prostu sprawdza, czy same moduły są starsze niż pliki wiązki. Jak zmusić go do rekompilacji (i uniknięcia ponownej kompilacji, gdy nie jest to potrzebne)?

UPDATE: O dziwo, gdy uruchomiony make all_test natychmiast po make clean wydaje się, że ./Emakefile jest używany zamiast test/Emakefile: Dostaję

Recompile: src/tests 
Recompile: src/server_protocol_client 

itp i żadne testy zamiast

Recompile: ../src/tests 
Recompile: ../src/server_protocol_client 

, którą otrzymuję ręcznie, wykonując cd test; erl -make. Każdy pomysł, dlaczego? W każdym razie, Naprawiłem ten problem poprzez usunięcie i zastąpienie all_testtest/Emakefile w Makefile:

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

Odpowiedz

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

To jest błędne. Każda linia tworzy swój własny proces. Zrób takie:

all_test: before_compile 
    cd test; \ 
    erl -make 
Powiązane problemy