Make:将文件名中的匹配日期写入文件并将文件写入新位置

时间:2015-09-05 13:24:24

标签: makefile gnu-make

我想使用makefile来获取文件(当然所有这些都需要一般化):

content/post/filename.md

并写信给

2015-01-01

将文件名sed '1 adate: 2015-01-01' > content/post/filename.md 的一部分添加到文件中。所以unix部分会是这样的:

content/%.md: $(subst ./,,$(shell find ./src/post/ -regextype posix-extended -regex '.*[0-9]{4}-[0-9]{2}-[0-9]{2}-.*\.md'))
在makefile中我会写一些类似的东西:

2015-01-01.filename.md

我不太清楚如何删除日期并将其粘贴到文件中并将其与makefile匹配。

对此有简单直接的解决方案吗?

另外,如果原始文件的名称如POST_SRC := $(subst ./,,$(shell find ./src/post/ -regextype posix-extended -regex '.*[0-9]{4}-[0-9]{2}-[0-9]{2}-.*\.md')) define POSTS_PARSE _target := $(shell $1 | grep -Po '\w+\.md') POSTS := $$(POSTS) $$(_target) $$(_target): $1 date=$(basename $< | grep -Po '\d{4}-\d{2}-\d{2}');\ cat $< | sed '1 a'$date > $@ endef $(foreach x,$(POST_SRC),$(eval $(call POSTS_PARSE,$x))) posts: $(POSTS) ,那么更容易做到这一切吗?

更新

这是我到目前为止所做的,但仍然没有工作:

case class Contact(id: String, version: Int, fName: String, lName: String, age: Int)

1 个答案:

答案 0 :(得分:0)

终于明白了。不确定是否有更好的方法。

POST_SRC := $(subst ./,,$(shell find ./src/post/ -regextype posix-extended -regex '.*[0-9]{4}-[0-9]{2}-[0-9]{2}-.*\.md'))

define POSTS_PARSE
_target := $(shell echo $1 | grep -Po '\w+\.md')
POSTS := $$(POSTS) $$(_target)
$$(_target): $1
  date=$$$$(basename $$< | grep -Po '\d{4}-\d{2}-\d{2}'); \
    sed "1 adate: $$$$date" $$< > $$@
endef

$(foreach x,$(POST_SRC),$(eval $(call POSTS_PARSE,$x)))

posts: $(POSTS)