LINUX.ORG.RU

Как в Makefile получить доступ к переменным окружения.


0

1

Вот фрагмент файла:

.PHONY : all clean

TARGET := ??????????
SOURCES := $(wildcard *.c)
HEADERS := $(wildcard *.h)

OBJECTS := $(patsubst %.c,%.o,$(SOURCES))

all : $(TARGET)
Я хочу переменную TARGET брать из параметров, передаваемых утилите make. Возможно ли такое? Другими словами, я хочу задавать имя компилируемой программы при запуске утилиты make. Помогите, пожалуйста, кто знает.

Ответ на: комментарий от Eddy_Em

Вот здорово, работает!
Один вопрос для общего развития. Я правильно понимаю, в строке make TARGET=«hello» часть TARGET=«hello» не относится к опциям утилиты make, мы просто задаем переменную окружения, видимую в контексте процесса make, а по завершении его переменная исчезает? Поэтому, я не найду подобного примера в документации к make?

podovalov5
() автор топика
Ответ на: комментарий от podovalov5

Это не переменная окружения, а параметр для make, который он интерпретирует как присваивание из-за наличия знака равно. В документации это есть.

xaizek ★★★★★
()

переменные окружения в мейке видны как обычные переменные:

$ cat Makefile
t123:
@echo $(OMG)
$ OMG=123 make
echo 123
123

что ты пытаешься сделать?

val-amart ★★★★★
()
Ответ на: комментарий от xaizek

Это не переменная окружения, а параметр для make, который он интерпретирует как присваивание из-за наличия знака равно. В документации это есть.

Понято. Тупанул я на радостях.

podovalov5
() автор топика

Почему ещё никто не сказал?

Другими словами, я хочу задавать имя компилируемой программы при запуске утилиты make.

make имя_компилируемой_программы

NeXTSTEP ★★
()

Я хочу переменную TARGET брать из параметров, передаваемых утилите make

Я так понял, что ТС желает сделать простенький Makefile для однотипных проектов? и позже размножать его копированием без правок?? тогда TARGET бери от имени каталога.

иначе могут быть траблы со всякими «clean» «doc» и прочими второстепенными целями.

MKuznetsov ★★★★★
()
$ cat  Makefile 
VAR = $(shell echo ${SH_VAR})

all:
	echo "test value: '$(VAR)'"

$ SH_VAR="123456789" make
echo "test value: '123456789'"
test value: '123456789'
emulek
()
Ответ на: комментарий от MKuznetsov

Не факт: скажем, есть у меня 100500 мелких сишных файлов в директории. И для них общий Makefile. И я хочу иметь возможность не только все скопом скомпилять, но и отдельно заданный файл. Естественно, я это сделал на wildcard'ах. А ТС хочет по-своему.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

все возможные цели

Такого требования в ТС не обнаружил. А если нужно, то вот пример (одно из штатных правил GNU make):

%: %.c
#  recipe to execute (built-in):
	$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o $@
NeXTSTEP ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.