$(info) 命令 io 重定向
$(info) command io redirection
我可以将标准错误从 make info
命令重定向到文件吗?例如。如果我想打印编译命令并将 2>
重定向到一个文件,该文件只会得到一个空字符串,但会打印 info
括号内的命令,如下所示:
ifdef VERBOSE
verbose := @cat /tmp/compilation.out
endif
development: $(source)
# Pipe to cat is just to redirect signals from make to don't exit on error
@$(info $(CC) -o $(target) $^ $(DEBUG)) 2> /tmp/compilation.out | cat
$(verbose)
@cat /tmp/compilation.out >> $(log)
在调用 shell 到 运行 配方之前,make 会扩展变量和函数。扩展的结果传递给shell.
2>
是一个 shell 构造,它不被 make 解释。
info
make 函数被定义为将其参数写入标准输出,并扩展为空字符串。因此,当 make 扩展此配方行时:
$(info $(CC) -o $(target) $^ $(DEBUG)) 2> /tmp/compilation.out | cat
首先它将参数扩展为 info
并将结果写入标准输出,然后用空字符串替换 info
函数,然后用结果调用 shell ;所以 shell 看到:
2> /tmp/compilation.out | cat
简短的回答是否定的,没有办法让 make 的 info
函数将输出写入文件。你必须使用 shell 知道的东西,比如 echo
:
@echo '$(CC) -o $(target) $^ $(DEBUG)' 2> /tmp/compilation.out | cat
我可以将标准错误从 make info
命令重定向到文件吗?例如。如果我想打印编译命令并将 2>
重定向到一个文件,该文件只会得到一个空字符串,但会打印 info
括号内的命令,如下所示:
ifdef VERBOSE
verbose := @cat /tmp/compilation.out
endif
development: $(source)
# Pipe to cat is just to redirect signals from make to don't exit on error
@$(info $(CC) -o $(target) $^ $(DEBUG)) 2> /tmp/compilation.out | cat
$(verbose)
@cat /tmp/compilation.out >> $(log)
在调用 shell 到 运行 配方之前,make 会扩展变量和函数。扩展的结果传递给shell.
2>
是一个 shell 构造,它不被 make 解释。
info
make 函数被定义为将其参数写入标准输出,并扩展为空字符串。因此,当 make 扩展此配方行时:
$(info $(CC) -o $(target) $^ $(DEBUG)) 2> /tmp/compilation.out | cat
首先它将参数扩展为 info
并将结果写入标准输出,然后用空字符串替换 info
函数,然后用结果调用 shell ;所以 shell 看到:
2> /tmp/compilation.out | cat
简短的回答是否定的,没有办法让 make 的 info
函数将输出写入文件。你必须使用 shell 知道的东西,比如 echo
:
@echo '$(CC) -o $(target) $^ $(DEBUG)' 2> /tmp/compilation.out | cat