检查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 

如果你不需要它在其他地方。