makefile中eval
时间: 2023-10-21 08:11:37 浏览: 101
在makefile中,eval是一个make函数,用于将参数作为makefile代码进行评估和执行。eval的参数可以是变量、函数、命令等makefile语句。
例如:
```
FOO = $(eval BAR = $(shell echo "hello"))$(info $(BAR))
all:
@echo $(FOO)
```
在这个例子中,eval函数将参数作为makefile代码进行评估和执行。eval函数中的代码使用了shell命令和info函数输出信息。当执行make命令时,eval函数会将代码执行,并将结果赋值给FOO变量。最后,make会输出"hello"。
相关问题
makefile的 eval 有什么用
Makefile 的 eval 函数可以用于对字符串进行求值,也可以用于动态生成 Makefile 的规则。eval 函数可以将字符串作为表达式进行求值,类似于 C 语言中的 eval 函数,但它可以在 Makefile 中使用。
使用 eval 函数,你可以在 Makefile 中定义一些变量,然后通过调用 eval 函数来动态生成规则。这样可以使 Makefile 更加灵活和可扩展。
举个例子,你可以定义一个变量
```
MYVAR = foo
```
然后使用 eval 函数来动态生成一个规则:
```
define myrule
all:
echo $(MYVAR)
endef
$(eval $(myrule))
```
这个规则会在执行 make 命令时输出 "foo"。通过 eval 函数,你可以动态生成这个规则,而不需要手动编写规则。这样可以提高 Makefile 的可维护性和可扩展性。
Makefile eval
在Makefile中,`eval`是一个特殊指令,它允许你在内部执行shell命令,并将其结果替换为字符串。这个功能通常用于动态地生成变量值,特别是那些依赖于其他条件(如时间戳、目录路径等)的值。例如:
```makefile
CURRENT_DATE := $(shell date +%Y%m%d)
tarball_name = myapp_$(CURRENT_DATE).tar.gz
eval $(call tarball_rule,$(tarball_name))
define tarball_rule
TARGET := $(1)
SRC_DIR = src/
OBJS = $(wildcard $(SRC_DIR)/*.cpp)
%.tar.gz: $(OBJS)
tar -czf $@ $(SRC_DIR)/*
endef
```
这里,`eval`配合`$(call)`调用了名为`tarball_rule`的宏,该宏会根据当前日期动态创建tarball名称,然后设置了一系列的依赖和规则。当你执行`make`命令时,Makefile会基于这些规则去构建目标。
阅读全文