я пытался сделать что-то похожее на 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