我知道以前曾经问过,但请耐心等待。 run_test是我想要制作的文件的名称。我更喜欢调用'make run_test'。我希望每次调用make run_test时都会调用prereq的makefile。但我不希望调用prereq的make来强制run_test重建。
run_test: build_prereq prereq_dir/prereq_ts
rebuild_test.sh
.PHONY: build_prereq
build_prereq:
make -C prereq_dir
如果make -C prereq(prereq_dir / makefile)检测到prereq的依赖项已过旧且需要重建prereq,则更新prereq_dir / prereq_ts。
这个问题是我总是调用rebuilt_test.sh,我认为这是因为执行了run_test的一个依赖项(因为它是PHONY)。
我已将run_test更改为:
,从而解决了这个问题run_test:: build_prereq
run_test:: prereq_dir/prereq_ts
rebuild_test.sh
.PHONY: build_prereq
build_prereq:
make -C prereq_dir
这是一个很好的解决方案吗?这首先运行build_prereq,然后在更新prereq_dir / prereq_ts时运行rebuild_test.sh(如果需要,将在build_prereq的make调用中发生)。
有没有更合适的方法来做到这一点。我不想创建额外的目标,因为它不允许直接调用make即'make run_test'。
答案 0 :(得分:0)
如果您愿意不可移植,GNU make支持仅限订单的先决条件(请参阅GNU制作手册),它完全符合您的要求:
run_test: | build_prereq
build_prereq:
$(MAKE) -C prereq_dir
(注意总是在调用子品牌时使用$(MAKE)
,从不make
)
答案 1 :(得分:0)
准确支持你想要的东西。
.PHONY: build_prereq
build_prereq:
${MAKE} -C prereq_dir
prereq_dir/prereq_ts: build_prereq ;
run_test: prereq_dir/prereq_ts
rebuild_test.sh
所以,你要求make来构建run_test
。
prereq_dir/prereq_ts
是最新的,它首先运行
build_prereq
的食谱。prereq_dir/prereq_ts
的配方(什么都不做 - 看到;
)。prereq_dir/prereq_ts
的时间戳,以确定run_test
是否已过期。完美。