gpt4 book ai didi

erlang - 更改宏时强制 erl -make 重新编译文件

转载 作者:行者123 更新时间:2023-12-04 20:57:28 24 4
gpt4 key购买 nike

我试图做类似于 How to make two different source directories in a Makefile output to one bin directory? 的事情,所以我有这些文件(相对于我的项目根目录):

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 之后,看来 ./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_testMakefile :
all_test: before_compile
erl -noshell -eval "make:all([{d, 'TEST'}])." -s init stop

最佳答案

all_test: before_compile
cd test
erl -make
cd ..

这是不正确的。每条生产线都产生自己的流程。这样做:
all_test: before_compile
cd test; \
erl -make

关于erlang - 更改宏时强制 erl -make 重新编译文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881008/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com