代码之家  ›  专栏  ›  技术社区  ›  wvxvw

在Make规则中将源和目标配对

  •  0
  • wvxvw  · 技术社区  · 7 月前

    我已经很久没有使用Make了,我记得有一个技巧可以做到这一点,但我的记忆力很差,而且词汇表太笼统了,不适合搜索。。。

    所以:

    SOURCES := $(wildcard */*.org)
    JIRAS := $(patsubst %.org,%.jira,$(SOURCES))
    
    .PHONY : all
    
    all : $(JIRAS)
    
    $(JIRAS) : $(SOURCES)
    # $< is wrong here, because it will always be the first source
        emacs $< --batch -l $(CURDIR)/org2jira -f export-to-jira --kill
    

    正如评论所暗示的那样 $< 部分错了。我认为有一种方法可以将其分为两条规则,然后Make会在匹配的文件上成对调用它,但在尝试了一些组合后,我只是不记得它是什么。

    如果它更容易,可以用Shell编写所需的代码:

    find . -type f -name '*.org' -exec emacs {} --batch -l $(pwd)/org2jira -f export-to-jira --kill \;
    

    NB。我不在乎解决方案是否特定于GNUMake。

    1 回复  |  直到 7 月前
        1
  •  2
  •   MadScientist    7 月前

    您想使用 pattern rule .

    比如:

    SOURCES := $(wildcard */*.org)
    JIRAS := $(patsubst %.org,%.jira,$(SOURCES))
    
    .PHONY : all
    
    all : $(JIRAS)
    
    %.jira : %.org
            emacs $< --batch -l $(CURDIR)/org2jira -f export-to-jira --kill