2010-10-07 1 views
5

я пытался сделать что-то похожее на How to make two different source directories in a Makefile output to one bin directory?, поэтому у меня есть эти файлы (относительно моего корня проекта):Принуждение Эрл -make перекомпилировать файлы, когда макросы меняются

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 

Проблема заключается в том, что работает make test Безразлично 'перекомпилируйте любые модули, которые уже скомпилированы с помощью make. Кажется, erl -make не заботится о том, чтобы они были скомпилированы без определения TEST, он просто проверяет, что сами модули старше, чем файлы луча. Как заставить его перекомпилировать (и избегать перекомпиляции, когда это не нужно)?

UPDATE: Как ни странно, когда сразу работает make all_test после make clean, оказывается, что ./Emakefile используется вместо test/Emakefile: Я не подвожу

Recompile: src/tests 
Recompile: src/server_protocol_client 

и т.д., и никаких испытаний вместо

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

, который я получаю от cd test; erl -make вручную. Любая идея почему? Во всяком случае, я исправила эту проблему путем удаления test/Emakefile и замена all_test в Makefile:

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

ответ

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

Это неправильно. Каждая строка производит собственный процесс. Сделайте так:

all_test: before_compile 
    cd test; \ 
    erl -make 
Смежные вопросы