根据GNU 手册:
它将每个换行符或回车符/换行符对转换为一个空格。如果它是结果中的最后一件事,它还会删除尾随(回车和)换行符。
但是如果没有回车,使用 awk 会变得更加困难:
FILE = $(shell cat $(PATH))
TEXT = $(shell echo "$(FILE)" | awk '/Text/ {print $$3}')
所以我的问题是,在将文件内容分配给 Makefile 变量或任何智能解决方法时,是否有办法保持回车?
不,您不能在$(shell ...)
函数结果中保留换行符。
您当然可以像这样更改您的makefile:
FILE = $(PATH)
TEXT = $(shell cat $(FILE) | awk '/Text/ {print $$3}')
或者,为了避免 UUOC,
TEXT = $(shell awk '/Text/ {print $$3}' < $(FILE))
这是一种使用 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}