我的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)"))