запустить другой make-файл в make-файле - PullRequest
0 голосов
/ 31 августа 2010

Так как я не очень разбираюсь в процессе сборки / make-файлах на linux, я столкнулся с проблемой:

Настройка: у меня есть make-файл A, которому нужно установить некоторые переменные окружения перед запуском, это делается путем запуска . ./set_A_vars.sh (set_A_vars.sh содержит много export строк) перед запуском make -f A

теперь мне нужно сделать проект A внутри make-файла B. я попробовал следующую настройку для makefile B:

all: debug release

A_debug:
    . ./set_A_vars.sh && make -f A DEBUG=1

A_release:
    . ./set_A_vars.sh && make -f A DEBUG=0

debug:   A_debug some_B_stuff_debug
release: A_release some_B_stuff_debug

однако я получаю много ошибок, которые звучат как переменные окружения в set_A_vars.sh, которые не были установлены для make -f A ... в B.

Как я могу вызвать make-файл A из make-файла B с переменными окружения в set_A_vars.sh, установленными в make-файле B ??

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 26 января 2011

Ваш make-файл выглядит хорошо с этими условиями:

  1. Когда вы вызываете make из make-файла, используйте макро-вызов ${MAKE}, а не обычный make. (Это обеспечивает параллельную работу make, а также означает, что она все еще работает, даже если ваша make имеет другое имя (GNUmake скажем).)

  2. Если ваши цели не соответствуют реальным файлам, пометьте их .PHONY (см. Ниже).

  3. Требует ли some_B_stuff_debug сначала построить A? Тогда ты должен сказать сделай это.

    some_B_stuff_debug: A_debug
    some_B_stuff_debug: A_release

    Это явно неправильно. Одним из способов является обеспечение порядка через оболочку.

Попробуйте что-то вроде этого:

.PHONY: debug
debug:
    . ./set_A_vars.sh && ${MAKE} -f A DEBUG=1
    ${MAKE} some_B_stuff_debug

.PHONY: release
release:
    . ./set_A_vars.sh && ${MAKE} -f A DEBUG=0
    ${MAKE} some_B_stuff_debug

.PHONY: some_B_stuff_debug
∶
0 голосов
/ 31 августа 2010

Ваши make-файлы должны работать.Я предлагаю вам попробовать следующее:

Попробуйте запустить set_A_vars.sh из командной строки.

Убедитесь, что заданные переменные установлены.

make -f MakefileA, чтобы убедиться, что MakefileA действительно хорошо работает с набором этих переменных.

Попробуйте правило в MakefileB, которое проверит одну из переменных, скажем FOO:
test_var:
    @echo FOO is $(FOO)

Это должно работать, если вы только что запустили set_vars.sh.Если это не так, то есть пара вещей, которые могут быть неправильными ...

Теперь очистите переменные (включая FOO) и попробуйте это правило в MakefileB:
set_vars_and_test_them:
    ./set_A_vars.sh && echo FOO is $(FOO)

Теперь соберите все вместе:
A_debug:
    ./set_A_vars.sh && make -f MakefileA DEBUG=1

(я рекомендую не называть make-файл "A".)

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