【问题标题】:How to assign a file content into a Makefile variable without losing carriage-returns如何在不丢失回车的情况下将文件内容分配给 Makefile 变量
【发布时间】:2016-07-11 14:06:30
【问题描述】:

根据GNU manual

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

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

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

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

【问题讨论】:

    标签: makefile


    【解决方案1】:

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

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

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

    或者,为了避免 UUOC,

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

    【讨论】:

      【解决方案2】:

      这是一种使用 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}
      

      【讨论】:

        猜你喜欢
        • 2013-03-11
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        相关资源
        最近更新 更多