我想使用makefile来比较两个文件夹。如果两个文件夹相同,我什么都不做,但如果它们不同,我想创建一个文件夹。这是我的makefile抱怨:
#BINDIREXISTS:=T
ifeq "../.build" "../TopicA"
/bin/sh: ifeq: not found
make: *** [checkDest] Error 127
makefile如下:
PROJNAME=TopicA
TOP=..
SRCDIR=src
BUILDDIR=.build
SRC=TopicA.cpp
EXECUTABLE=TopicA.exe
CC=g++
#################################
#MACROS:
define bindirchk
#BINDIREXISTS:=$(shell if [ -d '$(TOP)/$(1)/$(2)/' ]; then echo "T"; else echo "F"; fi )
ifeq "$(strip $(TOP)/$(1))" "$(strip $(TOP)/$(2))"
echo "T"
else
echo "F"
endif
endef
define mkbuilddirs
@echo creating build directories $(TOP)/$(1) and $(TOP)/$(1)/$(2)
$(shell mkdir -p $(TOP)/$(1) $(TOP)/$(1)/$(2))
endef
#################################
#main targets and pre-reqs
all: checkDest
#$(CC) $(SRCDIR)/$(SRC) -o $(TOP)/$(BUILDDIR)/$(PROJNAME)/$(EXECUTABLE)
checkDest:
$(call bindirchk,$(BUILDDIR),$(PROJNAME))
echo $(BINDIREXISTS)
if [ "$(BINDIREXISTS)" "F" ]; then
# echo test found to be true
$(shell mkdir -p $(TOP)/$(1) $(TOP)/$(1)/$(2))
fi
clean:
rm -rf $(TOP)/$(BUILDDIR)/*
答案 0 :(得分:0)
Make没有本地方法来比较两个文件的相等性(从而有两个目录)。所以你必须在某些类型的脚本中进行相等检查,Make会调用(也许你已经尝试这样做,很难说)。如果你这样做,你也可以放置条件和代码来在脚本中创建一个新目录;你真的没有通过把它放在makefile中获得任何东西。所以这确实是一个脚本问题,一旦你有脚本工作,从makefile调用它将是微不足道的。
(我推荐Perl,但我听说Python也很好。)