检查CMake的运行make目标
问题描述:
我也做了下面的Makefile检查CMake的运行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
虽然目标CHECK2作品(时cmake的存在,我没有得到消息“第一次安装CMake”,当它不,我收到消息),目标检查即使在cmake存在时总是退出。
所以我不能使用目标检查目标exec。我必须使用目标check2,当然,会使退出,因为它找不到cmake。
我想使退出之前它开始回声“编译可执行文件...”。
答
当make决定需要重建一个目标时,它所做的第一件事就是展开配方中的所有make宏(变量)和函数。然后它将生成的扩展文本发送到shell。
在“检查”规则中,您正在使用make函数$(error ...),因此只要make决定构建该目标,它就会扩展配方,其中包括扩展$(error ...) )功能并退出。外壳不可能运行命令的一部分(如[ -f ... ]
,然后以某种方式指示它应该或不应该调用make函数)
如果你想使所有你不得不做的是有你的食谱失败你check2
配方显示一条消息,但它仍然成功了,所以它不会停止持续的使你可以这样做:。
.PHONY: check2
check2:
@[ -f `which cmake` ] || { echo "Install cmake first"; exit 1; }
.PHONY: exec
exec: check2
@echo "Compiling executable ..."
@[ -d ./build ] || mkdir ./build
@cd ./build; cmake ../src; make
或者你可以只把考不上执行目标本身:
.PHONY: exec
exec:
@[ -f `which cmake` ] || { echo "Install cmake first"; exit 1; }
@echo "Compiling executable ..."
@[ -d ./build ] || mkdir ./build
@cd ./build; cmake ../src; make
如果你不需要它在其他地方。