一般检查以避免危险的rm';makefile中的
我有一个Makefile,附加到一个我正在半维护的项目,但最初并没有编写。目前,这个Makefile确实有一个坏习惯,就是在未定义某些变量的情况下,在一般检查以避免危险的rm';makefile中的,makefile,Makefile,我有一个Makefile,附加到一个我正在半维护的项目,但最初并没有编写。目前,这个Makefile确实有一个坏习惯,就是在未定义某些变量的情况下,在makeclean上运行“rm*” 例如,它包括: rm$(SOMEDIR)/$(SOMEPREFIX)*和rm$(SOMEPREFIX)* 有几组这样的变量。有没有一种简单的方法可以确保我们不会意外地调用像rm*或rm/*这样的东西 当然,我可以单独检查$SOMEDIR和$SOMEPREFIX的所有组合,但最好做一些更安全的事情,不需要检查每个单
makeclean
上运行“rm*”
例如,它包括:
rm$(SOMEDIR)/$(SOMEPREFIX)*
和rm$(SOMEPREFIX)*
有几组这样的变量。有没有一种简单的方法可以确保我们不会意外地调用像rm*
或rm/*
这样的东西
当然,我可以单独检查$SOMEDIR
和$SOMEPREFIX
的所有组合,但最好做一些更安全的事情,不需要检查每个单独的变量/命令
有什么想法不需要我重写整件事吗?通常,您要在
清除
时删除的生成文件列表可以从(珍贵的)源文件列表中计算出来:
ROOTDIR = .
OBJDIR = objdir
$(SRCS) = $(wildcard *.c)
$(OBJS) = $(patsubst %.c,$(ROOTDIR)/$(OBJDIR)/%.o,$(SRCS))
为了避免灾难性的makeclean
后果,与不可预测的全局模式相比,更倾向于删除计算文件列表:
clean:
rm -f $(OBJS)
这比:
clean:
rm -f $(ROOTDIR)/$(OBJDIR)/*
通常,您要在
make clean
上删除的生成文件列表可以从(珍贵的)源文件列表中计算出来:
ROOTDIR = .
OBJDIR = objdir
$(SRCS) = $(wildcard *.c)
$(OBJS) = $(patsubst %.c,$(ROOTDIR)/$(OBJDIR)/%.o,$(SRCS))
为了避免灾难性的makeclean
后果,与不可预测的全局模式相比,更倾向于删除计算文件列表:
clean:
rm -f $(OBJS)
这比:
clean:
rm -f $(ROOTDIR)/$(OBJDIR)/*
@雷诺·帕卡莱是一个更好的解决方案。如果由于某种原因,它不适合您的情况,您可以使用
?=
为变量指定一个值(如果未设置)
例如
或者在顶部放一个错误检查,提示用户正确设置变量。(if中的空字符串触发了else案例)
@雷诺·帕卡莱是一个更好的解决方案。如果由于某种原因,它不适合您的情况,您可以使用
?=
为变量指定一个值(如果未设置)
例如
或者在顶部放一个错误检查,提示用户正确设置变量。(if中的空字符串触发了else案例)
如果变量通常在命令行上定义,则可以在makefile中添加默认值。如果您确实在命令行中定义了这些变量,它们将被覆盖:如果这些变量通常是在包含的另一个makefile中定义的,那么您可以使用
FOO?=bar
语法。这将仅在变量尚不存在时分配它。如果变量通常在命令行上定义,则可以在makefile中添加默认值。如果您确实在命令行中定义了这些变量,它们将被覆盖:如果这些变量通常是在包含的另一个makefile中定义的,那么您可以使用FOO?=bar
语法。这将仅在变量尚不存在时分配它。