Использовать переменные между make файлами
У меня есть структура каталогов, где я хочу один основной make файл в моей основной папке, а затем еще один make файл в моей тестовой и src-папке.
В моем основном make файле у меня есть директивы для обоих тестовых/всех, которые вызывают отдельные файлы make файлов. Я пытаюсь объявить переменные в моем основном make файле и сделать их доступными для этих других папок.
Например, в моем основном Makefile
PACKAGES = jansson mysql ....
all:
do something here
test:
cd test
make test
И затем в моем test/Makefile я хочу иметь доступ к предыдущей переменной PACKAGES и добавлять к ней эти индивидуальные зависимости makefile.
В файле test/Makefile
PACKAGES += googletest googlemock
test
do something here
Может ли кто-нибудь помочь мне решить эту проблему?
Спасибо
Ответы
Ответ 1
Вы можете создать другой файл, например Makefile.variable
, где эти общие переменные определены и включить файл, используя
include $(PATHTOSHAREDMAKEFILE)/Makefile.variable
Посмотрите руководство пользователя для получения дополнительной информации
Ответ 2
Вы можете передать переменную в командной строке:
test:
make -C test PACKAGES="$(PACKAGES)"
Обратите внимание, что все равно невозможно идти в другую сторону. Если test/Makefile
изменяет переменную, то эти изменения не могут возвращаться в вызывающий файл makefile.
Если вы хотите добавить к переменной PACKAGES
в основном make файле, вам придется реорганизовать вашу систему сборки, чтобы вместо этого включить под-make файлы. Таким образом, основной make файл устанавливает все, а затем включает (используя директиву include
, доступную в большинстве реализаций make), под-make файлы, которые добавляют к ним конкретные локальные цели, а также изменяют/добавляют переменные.
Например, скажем, у вас есть два тестовых каталога, test_foo
и test_bar
, вы можете иметь переменную, содержащую целевые объекты тестирования, и вызывать ее TEST_TARGETS
. Каждый make файл в папке test_*
добавляет свою локальную и уникальную цель в глобальную переменную, и основной make файл может их запускать.
Что-то вроде этого:
Основной файл makefile:
# Start empty
TEST_TARGETS =
include test_foo/Makefile
include test_bar/Makefile
test:
for target in "$(TEST_TARGETS)"; do \
$(MAKE) $(target); \
done
test_foo/Makefile:
TEST_TARGETS += test_foo
test_foo:
# Do some foo testing
test_bar/Makefile:
TEST_TARGETS += test_bar
test_bar:
# Do some bar testing
Ответ 3
ПАКЕТЫ экспорта = Янссон MySQL....