如何使用makefile检查是否存在具有特定扩展名的文件
我想检查makefile中是否存在具有特定扩展名的文件,但是这段代码不起作用:如何使用makefile检查是否存在具有特定扩展名的文件,makefile,gnu-make,Makefile,Gnu Make,我想检查makefile中是否存在具有特定扩展名的文件,但是这段代码不起作用: ejecutar: $(OUTPUT) clean ifeq (,$(wildcard *.dat)) ./$(OUTPUT) < $(OUTPUT).dat >$(OUTPUT).txt else ./$(OUTPUT) < $(OUTPUT).dat >$(OUTPUT).txt ejecutar:$(输出)清除 ifeq(,$(通配符*.dat)
ejecutar: $(OUTPUT) clean
ifeq (,$(wildcard *.dat))
./$(OUTPUT) < $(OUTPUT).dat >$(OUTPUT).txt
else
./$(OUTPUT) < $(OUTPUT).dat >$(OUTPUT).txt
ejecutar:$(输出)清除
ifeq(,$(通配符*.dat))
./$(输出)<$(输出).dat>$(输出).txt
其他的
./$(输出)<$(输出).dat>$(输出).txt
据说错误在ifeq行中。配方中的内容应该是shell脚本,而不是Makefile语法。在读取Makefile时,任何进行解释的内容都会被展开,通常情况下,您希望您的配方在执行特定配方时按原样进行检查。(这是一个常见的初学者常见问题。) 检查通配符是否与shell脚本中的任何文件匹配也出人意料地不明显
ejecutar: $(OUTPUT) clean
set -- *.dat \
; if [ -e "$$1" ]; then \
./$< < $<.dat >$<.txt; \
else \
./$< < $<.dat >$<.txt; \
fi
ejecutar:$(输出)清除
设置--*.dat\
; 如果[-e“$$1”];然后\
./$<$$您可以在配方中使用GNU make函数,而不是像ifeq
等指令。在这种情况下,GNU make的通配符
函数比shell更易于使用,因为如果没有匹配项,它将扩展为空字符串,而不是全局表达式。所以,if[-n'$(通配符*.dat)];然后…
就足够了。这本身不是一个坏的解决办法,但我想一箭双雕。但是,如果其中一个文件包含文字单引号,则该操作将失败。True。如果你担心的话,你当然可以解决这个问题。。。在make函数中修复引号实际上更简单,因为它不关心引号。只需$(subst'、“'”、$(…)
或类似工具即可。