2012-06-05 12 views
0

基於測試版在gnu make copy many files to a single location回答,我有工作規則,從不同的路徑數據複製到一個子目錄./figures/在我的build目錄如何解決gnu使用vpath的規則將文件複製到不同的目錄時,該目錄是./?

ORIG_FILE_DIRS += .. 
LOCAL_FILES += figures/myfig.png 
DESTDIR := figures 

all : $(LOCAL_FILES) 

vpath %.png $(ORIG_FILE_DIRS) 

$(DESTDIR)/%.png: %.png 
    mkdir -p $(DESTDIR) 
    cp $< [email protected] 

這很好地工作提供的數字是不是./ - 對於例如,修改該嘗試膠乳.sty文件(我需要在當前工作目錄)從備用路徑複製,我已經嘗試:

ORIG_FILE_DIRS += .. 
LOCAL_FILES += mycommon.sty 
DESTDIR := ./ 

all : $(LOCAL_FILES) 

vpath %.sty $(ORIG_FILE_DIRS) 

$(filter %.sty,$(LOCAL_FILES)) : $(DESTDIR)/%.sty: %.sty 
    mkdir -p $(DESTDIR) 
    cp $< [email protected] 

(濾波器是要明確的,因爲我試圖在./中有一些其他的.sty文件)

這給了我

make: Circular mycommon.sty <- mycommon.sty dependency dropped. 
make: Nothing to be done for `all'. 

我不知道該如何解決這個問題。我已經試了一個明確的路徑依賴:

$(filter %.sty,$(LOCAL_FILES)) : $(DESTDIR)/%.sty: ../%.sty 
    mkdir -p $(DESTDIR) 
    cp $< [email protected] 

,但仍然得到了循環依賴關係(針對../mycommon.sty)這樣做。

回答

1

我可以重命名原件:給它們一個不同的後綴,並使用普通的舊後綴規則。

1

我對另一個問題的回答很有道理,這也是如此。

有幾種方法可以做到,沒有完美的。可能是最醜陋的是使用一個臨時目錄:

ORIG_FILE_DIRS += ... 
DESTDIR := figures 
TEMPDIR := tempdir 
TEMP_FILES += $(TEMPDIR)/fig1.png 

all : $(TEMP_FILES) 
     mv $^ $(DESTDIR) 

vpath %.png $(ORIG_FILE_DIRS) 

$(TEMPDIR)/%.png: %.png 
     mkdir -p $(TEMPDIR) 
     cp $< [email protected] 

移動文件比複製文件要快得多(O(1)),所以速度不會受到影響。不要做任何愚蠢的事情,比如使用tempdir作爲你的目的地。

相關問題