Makefile 在运行生成规则之前检查二进制文件
我有一个简单的规则:Makefile 在运行生成规则之前检查二进制文件,makefile,phpunit,Makefile,Phpunit,我有一个简单的规则: .PHONY: test test: src/*Test.php $(PHPUNIT) $?;\ 它将查看我的单元测试并运行phpunit 我想要的是:(警告,无效的makefile语法) 我可以使用当前代码,只要添加if[!-e$(PHPUNIT)];然后警告;否则测试它;完成,但是if将过于冗长,因为它会对每个文件警告用户一次 我这里缺少的模式是什么?这样做的“让路”是让您的一次性检查本身成为一个单独的目标,并将其列为目标的先决条件,您只希望在检查发生后运行。
.PHONY: test
test: src/*Test.php
$(PHPUNIT) $?;\
它将查看我的单元测试并运行phpunit
我想要的是:(警告,无效的makefile语法)
我可以使用当前代码,只要添加if[!-e$(PHPUNIT)];然后警告;否则测试它;完成
,但是if将过于冗长,因为它会对每个文件警告用户一次
我这里缺少的模式是什么?这样做的“让路”是让您的一次性检查本身成为一个单独的目标,并将其列为目标的先决条件,您只希望在检查发生后运行。使用GNU make有一种方法:
TESTS:=$(wildcard *.test)
TEST_TARGETS=$(patsubst %,run_%,$(TESTS))
.PHONY: test
test: $(TEST_TARGETS)
run_%: check_php_unit
@echo Running test $(*)
check_php_unit:
@echo Checking for php unit
也就是说,为执行该测试集的每个测试文件创建一个虚拟目标,然后使这些目标依赖于
check\u php\u单元
target。check\u php\u unit
的命令可以执行您想要的任何验证,然后打印警告,或者使用错误代码退出并导致make运行终止,或者执行您想要的任何操作。我已经完成了以下make文件
.PHONY: check
check:
@[ -f `which cmake` ] || $(error Install cmake first)
.PHONY: check2
check2:
@[ -f `which cmake` ] || echo "Install cmake first"
.PHONY: exec
exec: check
@echo "Compiling executable ..."
@[ -d ./build ] || mkdir ./build
@cd ./build; cmake ../src; make
当targetcheck2工作时(当cmake存在时,我没有收到消息“先安装cmake”,当它不存在时,我收到消息),targetcheck始终退出,即使cmake存在
因此,我不能对targetexec使用targetcheck。我必须使用targetcheck2,当然,还必须放弃,因为它找不到cmake
我想在它开始响应“编译可执行文件…”之前退出。我认为我做得太过分了。如果没有二进制文件,make在尝试再次运行phpunit的第一个文件之后将失败。没有必要这么做。但是谢谢你提供了更好的语法。在此基础上有所改进。
.PHONY: check
check:
@[ -f `which cmake` ] || $(error Install cmake first)
.PHONY: check2
check2:
@[ -f `which cmake` ] || echo "Install cmake first"
.PHONY: exec
exec: check
@echo "Compiling executable ..."
@[ -d ./build ] || mkdir ./build
@cd ./build; cmake ../src; make