$(if) makefile 使用举例
时间: 2024-10-25 11:04:55 浏览: 14
在Makefile中,`$(if)`命令通常用于条件判断,可以根据某个变量是否存在、值是否满足某种条件来选择性地执行某些操作。下面是一个简单的例子:
```makefile
ifeq ($(APP_VERSION), 1.0)
ALL_TARGETS = app
else ifeq ($(APP_VERSION), 2.0)
ALL_TARGETS = app update
endif
all: $(ALL_TARGETS)
app:
@echo "Building App v$(APP_VERSION)"
update:
@echo "Updating App to v$(APP_VERSION)"
```
在这个例子中,`$(APP_VERSION)`是一个预设的变量。`ifeq`(等于比较)判断`APP_VERSION`的值是否为1.0或2.0。如果是1.0版本,就执行`all`目标里的`app`任务;如果是2.0版本,则执行`app`和`update`两个任务。
如果`APP_VERSION`的值不是1.0或2.0,`$(if)`之后的代码块将被忽略。
相关问题
makefile 语句 $= 什么意思 举例说明
在 Makefile 中,`$=` 是赋值语句,用于将右侧的值赋给左侧的变量。它与 `:=` 和 `=` 的区别在于,它可以在变量定义后被重新赋值,而不会影响之前定义的规则中使用该变量的值。
举个例子,假设我们有以下 Makefile:
```
foo = hello
bar $= world
all:
@echo "$(foo) $(bar)"
@$(MAKE) baz
baz:
@echo "$(foo) $(bar)"
bar $= everyone
```
在这个 Makefile 中,`foo` 与 `bar` 都是变量,`foo` 使用的是 `=` 赋值,而 `bar` 使用的是 `$=` 赋值。
在 `all` 规则中,我们首先输出 `$(foo) $(bar)` 的值,即 `hello world`。然后调用 `baz` 规则。
在 `baz` 规则中,我们再次输出 `$(foo) $(bar)` 的值,但是此时 `bar` 的值已经被重新赋值为 `everyone`,因此输出的是 `hello everyone`。
总之,`$=` 赋值语句可以用于动态修改变量的值,以实现更灵活的 Makefile 编写。
ifneq在makefile中的使用举例
在Makefile中,`ifneq`指令通常用于条件分支,当两个表达式不相等时执行某些操作。举个例子,如果你想创建一个自定义的编译步骤,只对特定的Linux内核版本(如4.9,4.14或4.19)应用,可以这样写:
```makefile
KERNEL_VERSIONS := kernel-4.9 kernel-4.14 kernel-4.19
ifeq ($(filter $(strip $(KERNEL_VERSIONS)),$(shell uname -r)..."
# 执行针对特定内核版本的特殊编译命令
else
build_step:
@echo "Unsupported kernel version $(uname -r). Skipping custom build."
endif
```
在这个例子中,`uname -r`命令获取当前系统的内核版本,然后`filter`函数和`strip`一起过滤掉`KERNEL_VERSIONS`中的空格并比较。如果系统内核版本匹配列表中的任何一个,`build_step`目标就会执行相应的定制编译命令,否则会提示用户正在使用的内核版本不受支持。
阅读全文