创建一个Makefile,可以递归调用子目录中的Makefile。

3
我正在尝试在根目录下创建一个Makefile,它创建一个输出(/bin)目录,然后递归进入子目录,查找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(我还没有循环进入子目录)。

在我的Server文件夹中的Makefile中,有两个.java文件,我有以下内容:

JC=javac

all: server

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

我的问题是,当我在初始Makefile中调用“export”时,我试图导出的变量没有被导出,我不明白为什么。

如果有人能够指向我的问题并指出一个优雅的解决方案来解决我的整体问题,我将非常感激。

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

1个回答

1

你的导出在多行中,因此在不同的shell调用中。在行末加上\以将它们连接起来。

此时直接在Makefile中导出变量会更加优雅,例如状态

ROOT=.
export ROOT

使用automake并让它为您生成makefile更加优雅。

使用非递归的makefile更加优雅。


1
“使用非递归的Makefile更加优雅。”有什么替代方案吗?每个文件夹都有一个不同的目标? - ffledgling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接