环境变量及变量传递
在Makefile
中使用系统环境变量,直接按照普通变量取值即可;
path:
@echo $(OS)
设置&取消环境变量
在make
中,当一个变量使用export
进行声明后,变量将被加入当前工作的环境变量中,以后在make
执行的所有规则的命令都可以使用这个变量。若需要取消,则使用unexport
export TARGET
export TARGET = main
export TARGET := $(TARGET)/m
export TARGET += 123
unexport TARGET
ps:unexport
只能取消同一层级的export
变量,子层级Makefile只能修改export
变量
变量传递
run:
make -f src/Makefile run EXECUTE=aa
run_TARGET:
make execute_TARGET TARGET=app
run_SCRIPTS:
make execute_SCRIPTS TARGET=scripts
execute_%:
echo $(TARGET)
make -f src/Makefile run EXECUTE=$(TARGET)
ps:通过命令行传递的变量优先级会高于export
整体Makefile
- main Makefile
TEST_EVN = 123
export TEST_EVN
export TARGET = main
export TARGET := $(TARGET)/m
export TARGET += 123
all:
@echo make all
@make -f src/Makefile all
path:
@echo $(OS)
@echo $(TEST_EVN)
@echo $(origin TEST_EVN)
@echo $(origin OS)
@echo $(TARGET)
# @make -f src/Makefile path
run:
make -f src/Makefile run EXECUTE=aa
run_TARGET:
make execute_TARGET TARGET=app
run_SCRIPTS:
make execute_SCRIPTS TARGET=scripts
execute_%:
echo $(TARGET)
make -f src/Makefile run TEST_EVN=$(TARGET)
- sub Makefile
all:
echo $(TEST_EVN)
echo all
path:
echo $(TEST_EVN)
echo path
run:
ifeq ($(TEST_EVN),app)
echo $(TEST_EVN) 12
else ifeq ($(EXECUTE),scripts)
echo $(TEST_EVN) 14
else
@$(error "no defined TEST_EVN")
endif
ifdef TEST_EVN
echo $(TEST_EVN) 19
endif