Linux 为什么Makefile即使不存在也会检测文件?
这是我的密码:Linux 为什么Makefile即使不存在也会检测文件?,linux,makefile,Linux,Makefile,这是我的密码: %.o: %.cpp @mkdir -p bin/obj/$(@D) ifeq ($(wildcard bin/obj/$@),) $(CC) -c -o bin/obj/$@ $< $(CFLAGS) $(FLAGS) else @echo "bin/obj/$@ exists" endif %.o:%.cpp @mkdir-p bin/obj/$(@D) ifeq($(通配符bin/obj/$@),) $(CC)-c-o bin/obj/$
%.o: %.cpp
@mkdir -p bin/obj/$(@D)
ifeq ($(wildcard bin/obj/$@),)
$(CC) -c -o bin/obj/$@ $< $(CFLAGS) $(FLAGS)
else
@echo "bin/obj/$@ exists"
endif
%.o:%.cpp
@mkdir-p bin/obj/$(@D)
ifeq($(通配符bin/obj/$@),)
$(CC)-c-o bin/obj/$@$<$(CFLAGS)$(标志)
其他的
@回显“bin/obj/$@存在”
恩迪夫
我有一个问题,当目录obj存在时,我总是得到false
我说的是这种情况:
($(通配符bin/obj/$@),)
我不知道怎么修理它
Makefile始终打印存在的文件,即使我将其从磁盘中删除
它只在我删除obj目录时起作用
如何修复它?问题在于Make在执行规则之前计算条件,而
$@
尚未定义(并且可能尚未创建文件)。通配符语句的计算结果为$(wildcard/bin/obj/)
,如果目录存在,它将生成“bin/obj/”,我想它会这样做
解决这个问题的方法不止一种。最直接的方法是将条件放入命令中,以便Make将其传递给shell:
%.o: %.cpp
@mkdir -p bin/obj/$(@D)
@if [ -e bin/obj/$@ ]; then echo it exists; else $(CC) ...; fi