сделать, чтобы сравнить две папки - PullRequest
0 голосов
/ 07 октября 2010

Я хочу использовать make-файл для сравнения двух папок. Если две папки равны, я ничего не делаю, но если они разные, я хочу создать папку. Вот мой make-файл, на который жалуются:

#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 голосов
/ 08 октября 2010

У Make нет собственного метода сравнения двух файлов на равенство (и, следовательно, двух каталогов). Так что вам придется выполнить проверку на равенство в каком-то скрипте, который вызовет Make (может быть, вы уже пытаетесь это сделать, трудно сказать). И если вы сделаете это, вы также можете поместить в скрипт условный код и код для создания нового каталога; Вы действительно ничего не получаете, помещая это в make-файл. Так что это действительно проблема сценариев, и как только у вас будет работать скрипт, его вызов из make-файла будет тривиальным.

(я рекомендую Perl, но я слышал, что Python тоже очень хорош.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...