Создание make-файла, который рекурсивно вызывает make-файлы в подкаталогах - PullRequest
2 голосов
/ 06 октября 2011

Я пытаюсь создать Make-файл в корневом каталоге, который создает выходной каталог (/ bin), а затем рекурсивно переходит в подкаталоги, ищет Make-файл, вызывает его с файлами в этом каталоге и выводит все в / 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

Что происходит, когда я вызываю "export" в исходном Makefile, переменные, которые я пытаюсь экспортировать, не экспортируются, и я не понимаю, почему.

Буду очень признателен, если кто-нибудь ответит мне на мой вопрос, а также на элегантное решение для решения моей общей проблемы, пожалуйста.

Makefile'ы немного сложны для меня на данный момент: кажется, есть несколько способов достижения подобного решения, и я не уверен, какой из них является более подходящим и элегантным.

1 Ответ

1 голос
/ 06 октября 2011

Экспорт выполняется в несколько строк и, следовательно, в разных вызовах оболочки. Поставьте \ в конце строки, чтобы присоединиться к ним.

На данный момент немного элегантнее экспортировать переменные непосредственно в Makefile, например состояние

ROOT=.
export ROOT

Еще более элегантно использовать automake и заставить его сгенерировать make-файл для вас.

Еще более элегантно использовать нерекурсивные make-файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...