执行shell命令的Makefile挂起



我的makefile遇到问题,因为当我发出make debug时它挂起了。

这是目录树:


├── makefile
└── src
└── config
├── config_192_168_3_226.h
└── config.h

这是三个文件的内容:

makefile:

BOARD :=  $(shell awk '/BOARD_VERS/{print $NF}' $(echo "src/config/$(grep -oP "(?<=")(.*?)(?=")" src/config/config.h)"))
.PHONY: debug
# Debug rule
debug:
@echo 'BOARD        :' $(BOARD)

配置h:

#ifndef _CONFIG_H
#define _CONFIG_H
#include "config_192_168_3_226.h"
#endif /* _CONFIG_H */

config_192_168_3_226.h:

#define BOARD_VERS      V1

我用来设置BOARD变量的命令工作正常,但在我的makefile中发出时却不正常。

awk '/BOARD_VERS/{print $NF}' $(echo "src/config/$(grep -oP "(?<=")(.*?)(?=")" src/config/config.h)")

我的makefile出了什么问题?非常感谢。

$制作起来很特别。如果要将其传递给shell,则在$(shell ...)函数中的BOTH配方AND中,必须将其转义为$$

所以这里:

BOARD :=  $(shell awk '/BOARD_VERS/{print $NF}' $(echo "src/config/$(grep -oP "(?<=")(.*?)(?=")" src/config/config.h)"))

make将$(echo ...)视为具有长而奇怪名称的make变量,并扩展为空字符串。因此,基本上,您不向awk传递任何参数,这意味着它正在读取stdin以进行操作,这就是它看起来挂起的原因。

您必须将所有不是make变量的$加倍:

BOARD :=  $(shell awk '/BOARD_VERS/{print $$NF}' $$(echo "src/config/$$(grep -oP "(?<=")(.*?)(?=")" src/config/config.h)"))

最新更新