我试图在根目录中创建一个创建输出(/ 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在这一点上对我来说有点棘手:似乎有多种方法可以实现类似的解决方案,我不确定哪一种更合适和优雅。
答案 0 :(得分:1)
您的导出在多行上,因此在不同的shell调用中。在一行的末尾添加一个\来加入它们。
此时更优雅的是直接在Makefile中导出变量,例如州
ROOT=.
export ROOT
使用automake
并使其为您生成makefile更为优雅。
使用非递归makefile甚至更优雅。