Принудительно erl -make перекомпилировать файлы при изменении макросов - PullRequest
5 голосов
/ 07 октября 2010

Я пытался сделать что-то похожее на Как сделать два разных исходных каталога в выходных данных Makefile в один каталог bin? , поэтому у меня есть эти файлы (относительно корня моего проекта):

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, он просто проверяет, что сами модули старше, чем файлы лучей. Как заставить его перекомпилировать (и избежать перекомпиляции, когда он не нужен)?

ОБНОВЛЕНИЕ : Странно, но при запуске make all_test сразу после make clean вместо test/Emakefile используется ./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

1 Ответ

3 голосов
/ 09 июня 2011
all_test: before_compile
    cd test
    erl -make
    cd ..

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

all_test: before_compile
    cd test; \
    erl -make
...