变量值"/>
Makefile 变量值
create_file := $(shell if [ ! -f output.txt ]; then echo "Creating output.txt"; touch output.txt; fi)output.txt: input.txtrm output.txt;$(create_file)
不会创建新文件,原因:
在Makefile中,变量的值是在Makefile加载时就进行解析和设置的。因此,在变量中执行$(shell ...)
函数时,它会在加载时执行一次,并将结果赋给变量。
如果想在每次执行规则时都执行条件语句和命令,可以将它们直接写在规则中,而不是放在变量中。
在Makefile中,$(shell ...)
函数通常用于在Makefile加载时执行shell命令,并将结果作为变量的值。它在以下情况下会被使用:
- 在变量赋值时需要执行shell命令并获取输出结果:
VAR := $(shell command)
在这个例子中,command
是要执行的shell命令。$(shell ...)
函数会执行command
命令,并将其输出结果赋给变量VAR
。
- 在规则中需要使用shell命令的输出结果:
target:@$(shell command)
在这个例子中,command
是要执行的shell命令。$(shell ...)
函数会在每次执行规则时执行command
命令,并将其输出结果作为命令来执行。
请注意,$(shell ...)
函数会在Makefile加载时执行一次,而不是在每次执行规则时执行。因此,它适用于在Makefile加载时获取一些静态的信息或设置变量的值。
总结来说,当您需要在Makefile加载时执行shell命令并获取输出结果,或者在规则中需要使用shell命令的输出结果时,可以使用$(shell ...)
函数。
在Makefile的规则中,可以使用条件语句来执行shell if命令。但是,不需要将它包装在$(shell ...)
函数中。
以下是一个示例,展示了如何在规则中使用条件语句和shell if命令:
target:@if [ condition ]; then \command; \fi
在上述示例中,condition
是要检查的条件,command
是要执行的命令。如果条件为真,则执行命令。
请注意,在Makefile中编写条件语句时,需要使用Tab键进行缩进,并确保条件和命令之间的空格正确。
使用这种方式,可以在规则中使用条件语句来执行shell if命令,并根据条件的结果执行相应的命令。
更多推荐
Makefile 变量值
发布评论