Как сделать переменную внутри правила в make-файле глобальной? - PullRequest
0 голосов
/ 10 января 2019

У меня есть make-файл с отдельными правилами, которые устанавливают переменную с тем же именем. Как мне установить эту переменную, чтобы она стала глобальной из правила, чтобы я мог использовать ее позже.

rule1: test_var=/path/to/folder/

rule2: test_var=/path/to/another/folder/

$(info test_var is $(test_var))

Когда я вызываю "make rule2", он говорит "test var is"

Но я хочу "test var is / path / to / another / folder"

Спасибо!

EDIT Возможно, я слишком сильно упростил свой подход, я думал, что у меня есть идея глобальной переменной, но make, возможно, не следует использовать таким образом. Вот проблема ниже.

Когда я запускаю этот код, я получаю сообщение об ошибке *** Нет правила для создания цели '/file_i_want_compiled.c', необходимой для 'out / IceCream'. Стоп

LINK:= -lpthread
C_SRCS = 
C_SRCS += folder1/file1.c
C_FLAGS:= -stf=gnu11

OBJ_PATH= out/objects/

rule1: path = /path/to/rule1folder
.PHONY : rule1
rule2: path = /path/to/rule2folder
.PHONY : rule2

C_SRCS_NO_DIR := $(notdir $(C_SRCS))
C_OBJS        := $(C_SRCS_NO_DIR:%.c=$(OBJ_PATH)%.o
C_OBJS        += $(path)/file_i_want_compiled.o

out/IceCream: GEN_ICECREAM $(C_OBJS) $(OBJ_PATH)IceCream.o
    $(CC) $(C_FLAGS) $(C_OBJS) %(OBJ_PATH)IceCream.o -o $@ $(LINK)

/ путь / к / rule1folder & / Путь / к / rule2folder оба имеют свой уникальный файл file_i_want_compiled.c

Я вызываю make с make rule1 , например

1 Ответ

0 голосов
/ 10 января 2019

Вы на самом деле устанавливаете переменную правильно, но оператор информации не оценивается в контексте рецепта. Вы можете проверить это, посмотрев на очень длинный вывод make -d rule1. Обратите внимание, что информационный оператор оценивается перед любыми правилами.

Вы можете распечатать его в контексте правила, выполнив что-то вроде

rule1: test_var=/path/to/folder/

rule2: test_var=/path/to/another/folder/

rule%:
    $(info test_var is $(test_var))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...