Makefile 使之比较两个文件夹

Makefile 使之比较两个文件夹,makefile,Makefile,我想使用makefile来比较两个文件夹。如果两个文件夹相等,我不做任何事情,但如果它们不同,我想创建一个文件夹。这是我的makefile,它正在抱怨: #BINDIREXISTS:=T ifeq "../.build" "../TopicA" /bin/sh: ifeq: not found make: *** [checkDest] Error 127 生成文件如下所示: PROJNAME=TopicA TOP=.. SRCDIR=src BUILDDIR=.build SRC=Topic

我想使用makefile来比较两个文件夹。如果两个文件夹相等,我不做任何事情,但如果它们不同,我想创建一个文件夹。这是我的makefile,它正在抱怨:

#BINDIREXISTS:=T
ifeq "../.build" "../TopicA"
/bin/sh: ifeq: not found
make: *** [checkDest] Error 127
生成文件如下所示:

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)/*

Make没有一个本地方法来比较两个文件是否相等(从而比较两个目录)。因此,您必须在Make将调用的某种脚本中执行相等性检查(可能您已经在尝试这样做了,很难说)。如果你这样做了,你也可以在脚本中加入条件和创建新目录的代码;把它放到makefile中,你真的什么也得不到。因此,这实际上是一个脚本问题,一旦脚本正常工作,从makefile调用它将变得微不足道


(我推荐Perl,但我听说Python也很好。)

请将代码格式化为代码,使用编辑窗口上方的按钮。这将使你的问题更容易阅读,更多的SOER将愿意提供帮助。