2011-10-06 84 views
2

我想在創建輸出(/ bin)目錄的根目錄中創建一個Makefile,然後遞歸地進入子目錄,尋找一個Makefile,用它的文件該目錄,並輸出/ bin中的所有內容。創建一個遞歸調用子目錄中的makefile的生成文件

Makefile文件在根如下:

DIR=bin 
OUT_DIR=/bin 
MAKE=make 
CURRENT_DIR=./Server 
ROOT=. 

all: compile 

compile: dir 
    export ROOT; 
    export OUT_DIR; 
    export CURRENT_DIR; 
    export; 
    $(MAKE) -C $(CURRENT_DIR) 

dir: 
     mkdir -p $(DIR); 

clean: 
     rm -rf $(OUT_DIR)/* 

bin目錄被創建,好像Makefile文件服務器目錄中也被調用(我沒有一個循環進入子目錄)。

在我的Makefile文件服務器,其中兩個.java文件是,我有以下幾點:

JC=javac 

all: server 

server: 
    echo $(OUT_DIR); 
    echo $(CURRENT_DIR); 
    $(JC) -d $(OUT_DIR) $(CURRENT_DIR)/*.java 

正在發生的事情是,當我打電話在最初的Makefile「出口」,變量我想出口不出口,我不明白爲什麼。

我真的很感激,如果有人可以請指點我的問題,也指向我一個優雅的解決方案,以解決我的整體問題,請。

在這一點上,Makefiles對我來說有點棘手:似乎有多種方法可以實現類似的解決方案,而且我不確定哪個更合適和更優雅。

回答

1

您的導出位於多行,因此位於不同的shell調用中。把一個\放在一行的末尾來加入它們。

在這一點上,直接在Makefile文件中導出變量有點優雅,狀態

ROOT=. 
export ROOT 

它使用automake更優雅,並讓它爲您生成makefile。

使用非遞歸makefile甚至更優雅。

+0

非常感謝!你解決了我的問題,謝謝! – Jary

+0

「使用非遞歸makefile甚至更優雅」,還有什麼選擇?每個文件夾的目標不同? – ffledgling