make来比较两个文件夹

时间:2010-10-07 16:14:07

标签: makefile

我想使用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)/*

1 个答案:

答案 0 :(得分:0)

Make没有本地方法来比较两个文件的相等性(从而有两个目录)。所以你必须在某些类型的脚本中进行相等检查,Make会调用(也许你已经尝试这样做,很难说)。如果你这样做,你也可以放置条件和代码来在脚本中创建一个新目录;你真的没有通过把它放在makefile中获得任何东西。所以这确实是一个脚本问题,一旦你有脚本工作,从makefile调用它将是微不足道的。

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