makefile中的错误
发布时间:2020-12-16 09:31:15 所属栏目:百科 来源:网络整理
导读:我正在使用gnu Make 3.82并且有一个恼人的问题. 我有一个规则设置目录之间的依赖关系. OBJDIR=../obj$(objdir)/%.o: %.C $(COMPILE) -MM -MT$(objdir)/$(notdir $@) $ -o $(DEPDIR)/$(notdir $(basename $).d )$(COMPILE) -o $(objdir)/$(notdir $@ ) -c $
我正在使用gnu Make 3.82并且有一个恼人的问题.
我有一个规则设置目录之间的依赖关系. OBJDIR=../obj $(objdir)/%.o: %.C $(COMPILE) -MM -MT$(objdir)/$(notdir $@) $< -o $(DEPDIR)/$(notdir $(basename $<).d ) $(COMPILE) -o $(objdir)/$(notdir $@ ) -c $< 为此,obj目录必须存在. $(objdir)/%.o: %.C $(objdir) $(COMPILE) -MM -MT$(objdir)/$(notdir $@) $< -o $(DEPDIR)/$(notdir $(basename $<).d ) $(COMPILE) -o $(objdir)/$(notdir $@ ) -c $< $(objdir): mkdir $(objdir) 这不起作用,因为它在目录存在时失败然后make停止 if [ ! -d $(objdir) ] ; then mkdir $(objdir) fi 但显然我有些不对劲.这样做的最佳方法是什么? 解决方法
一种简单的方法是使用:
mkdir -p ../obj 目录存在时它不会失败. 我通常为此创建一个宏MKPATH: MKPATH = mkdir -p 然后引用规则中的宏: $(objdir): $(MKPATH) $(objdir) 这样,如果有必要,我可以在不更改makefile的情况下更改行为. 你的shell片段: if [ ! -d $(objdir) ] ; then mkdir $(objdir) fi 不能像写的那样工作,因为make分别执行每一行. 你可以写(注意添加的分号): if [ ! -d $(objdir) ] ; then $(MKPATH) $(objdir) ; fi 要么: if [ ! -d $(objdir) ] ; then $(MKPATH) $(objdir); fi 要么: [ -d $(objdir) ] || $(MKPATH) $(objdir) 请注意,命令行必须整体成功,因此请勿尝试: [ ! -d $(objdir) ] && $(MKPATH) $(objdir) 如果该目录存在,则第一个替代方法失败,但是shell以非零状态退出,因此失败…并导致构建失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |