2011-10-06 86 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