首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查Makefile中是否存在文件,以便将其删除?

如何检查Makefile中是否存在文件,以便将其删除?
EN

Stack Overflow用户
提问于 2011-04-05 22:17:36
回答 11查看 230.3K关注 0票数 166

在我的Makefile我正在尝试检查文件是否存在,然后再永久删除。我使用此代码,但收到错误。

它有什么问题?

代码语言:javascript
运行
复制
if [ -a myApp ]
 then
     rm myApp
 fi

我收到以下错误消息

代码语言:javascript
运行
复制
if [ -a myApp ]
 /bin/sh: Syntax error: end of file unexpected (expecting "then")
 make: *** [clean] Error 2
EN

回答 11

Stack Overflow用户

发布于 2013-12-13 20:41:29

看到这么多人使用shell脚本来实现这一点是很奇怪的。我一直在寻找一种使用原生makefile语法的方法,因为我是在任何目标之外编写的。您可以使用wildcard检查文件是否存在的函数:

代码语言:javascript
运行
复制
ifeq ($(UNAME),Darwin)
     SHELL := /opt/local/bin/bash
     OS_X  := true
 else ifneq (,$(wildcard /etc/redhat-release))
     OS_RHEL := true
 else
     OS_DEB  := true
     SHELL := /bin/bash
 endif

更新:

我找到了一种真正适合我的方法:

代码语言:javascript
运行
复制
ifneq ("$(wildcard $(PATH_TO_FILE))","")
    FILE_EXISTS = 1
else
    FILE_EXISTS = 0
endif
票数 224
EN

Stack Overflow用户

发布于 2015-09-08 23:05:04

问题是当您将命令拆分为多行时。因此,您可以使用\在如上所示的行的末尾继续,或者您可以将所有内容放在一行中,使用&&bash中的运算符。

然后,您可以使用test测试文件是否存在的命令,例如:

代码语言:js
复制
test -f myApp && echo File does exist

-f file如果file存在并且是常规文件,则为True。

-s file如果文件存在且大小大于零,则为True。

或者不:

代码语言:javascript
运行
复制
test -f myApp || echo File does not exist
test ! -f myApp && echo File does not exist

test等同于[命令。

代码语言:js
复制
[ -f myApp ] && rm myApp   # remove myApp if it exists

它会像你的原始示例一样工作。

请参见:help [或者help test有关更多语法,请参阅。

票数 69
EN

Stack Overflow用户

发布于 2011-04-05 22:37:29

它可能需要在行尾加上一个反斜杠才能继续(尽管这可能取决于make的版本):

代码语言:javascript
运行
复制
if [ -a myApp ] ; \
then \
     rm myApp ; \
fi;
票数 50
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5553352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档