【问题标题】:Creating a makefile that recursively calls makefiles in subdirectories创建一个递归调用子目录中的makefile的makefile
【发布时间】:2011-10-07 02:53:38
【问题描述】:

我正在尝试在根目录中创建一个 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 也被调用(我还没有进入子目录的循环)。

在我的服务器中的 Makefile 中,有两个 .java 文件,我有以下内容:

JC=javac

all: server

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

发生的情况是当我在初始 Makefile 中调用“export”时,我尝试导出的变量没有被导出,我不明白为什么。

如果有人能指点我的问题,并指点我一个优雅的解决方案来解决我的整体问题,我将不胜感激。

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

【问题讨论】:

    标签: makefile


    【解决方案1】:

    您的导出位于多行,因此在不同的 shell 调用中。在行尾添加 \ 以加入它们。

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

    ROOT=.
    export ROOT
    

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

    使用非递归 makefile 更加优雅。

    【讨论】:

    • “使用非递归 makefile 更加优雅。”,有哪些替代方案?每个文件夹的目标不同?
    猜你喜欢
    • 2017-03-26
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-23
    • 2020-10-10
    相关资源
    最近更新 更多