创建一个在子目录中递归调用makefile的makefile

时间:2011-10-06 17:34:42

标签: makefile

我试图在根目录中创建一个创建输出(/ bin)目录的Makefile,然后递归进入子目录,查找Makefile,用该目录中的文件调用它,然后输出/ bin中的所有内容

根目录中的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中调用“export”时,我尝试导出的变量不会被导出,我不明白为什么。

我真的很感激,如果有人能够指出我的问题,并指出我想要解决我的整体问题的优雅解决方案。

Makefiles在这一点上对我来说有点棘手:似乎有多种方法可以实现类似的解决方案,我不确定哪一种更合适和优雅。

1 个答案:

答案 0 :(得分:1)

您的导出在多行上,因此在不同的shell调用中。在一行的末尾添加一个\来加入它们。

此时更优雅的是直接在Makefile中导出变量,例如州

ROOT=.
export ROOT

使用automake并使其为您生成makefile更为优雅。

使用非递归makefile甚至更优雅。