2010-10-07 125 views
0

我想用一個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)/* 
+2

請將代碼格式化爲代碼,使用編輯窗口上方的按鈕。這會讓你的問題更容易閱讀,更多的SOE會願意提供幫助。 – 2010-10-07 21:46:38

回答

0

製作不具有比較平等的兩個文件(並因此兩個目錄),一個本地方法。所以你必須在Make會調用的某種腳本中進行平等檢查(也許你正在試圖這麼做,很難說)。如果你這樣做,你還可以在條件中添加條件語句和用於創建新目錄的代碼;你真的沒有獲得任何東西,把它放在makefile中。所以這真的是一個腳本問題,一旦你有腳本工作,從makefile調用它將是微不足道的。

(我推薦Perl,但是我聽說Python也很好。)