如何将文件内容分配到Makefile变量而不会丢失回车符

时间:2013-10-18 13:03:47

标签: makefile

根据GNU manual

  

它将每个换行符或回车符/换行符对转换为单个空格。它还会删除尾部(回车和换行)换行符,如果它是结果中的最后一行。

但是如果没有回车,那么使用awk会更加困难:

FILE = $(shell cat $(PATH))
TEXT = $(shell echo "$(FILE)" | awk '/Text/ {print $$3}')

所以我的问题是,在将文件内容分配给Makefile变量或任何智能解决方法时,是否有办法保持回车?

2 个答案:

答案 0 :(得分:2)

不,您无法在$(shell ...)功能的结果中保留换行符。

您当然可以像这样更改您的makefile:

FILE = $(PATH)
TEXT = $(shell cat $(FILE) | awk '/Text/ {print $$3}')

或者,为了避免使用UUOC,

TEXT = $(shell awk '/Text/ {print $$3}' < $(FILE))

答案 1 :(得分:0)

这是一种使用awk从文件中提取一些行并将其导入到makefile同时保留换行符的方法。

LOCAL_INO_SRCS ?= $(wildcard *.ino)
t = $(shell t=$$(mktemp);echo $$t;awk '/^\#if 0 .. MAKEFILE{/{f=1;next}/^\#endif .. MAKEFILE}/{f=0}f' $(LOCAL_INO_SRCS) >$$t )
include $t
$(shell rm $t)

以下是您可以从源文件导入的示例:

#if 0 // MAKEFILE{

BOARD_TAG = attiny85

# usbtiny hack
MONITOR_PORT = usb
FORCE_MONITOR_PORT = define

#endif // MAKEFILE}