如何编写依赖于目标部分的依赖项的makefile规则?

如何编写依赖于目标部分的依赖项的makefile规则?,makefile,Makefile,我想写一条如下的规则: A_vs_B.txt : A.txt B.txt 但这是一条一般规则。问题是我不能有两个%s(据我所知)。我曾考虑只生成目标%.txt,然后使用字符串函数解析依赖项中的A和B,但这将相当复杂。我想知道是否有更好的方法来编写这样的规则。有两种选择: (您对依赖项中的字符串咀嚼的想法)。类似的事情(可能更好/更短,但这是我首先想到的) 生成的目标/先决条件。尽管您如何生成所需的目标/先决条件取决于生成对的位置/方式等 H1 := $(REP1) H2 := $(REP2)

我想写一条如下的规则:

A_vs_B.txt : A.txt B.txt
但这是一条一般规则。问题是我不能有两个%s(据我所知)。我曾考虑只生成目标%.txt,然后使用字符串函数解析依赖项中的A和B,但这将相当复杂。我想知道是否有更好的方法来编写这样的规则。

有两种选择:

  • (您对依赖项中的字符串咀嚼的想法)。类似的事情(可能更好/更短,但这是我首先想到的)

  • 生成的目标/先决条件。尽管您如何生成所需的目标/先决条件取决于生成对的位置/方式等

    H1 := $(REP1)
    H2 := $(REP2)
    
    SEP := _vs_
    JOIN := $(SEP)
    
    define mktgt
        H1 += $R.pr1
        H2 += $R.pr2
        JOIN += $(SEP)
    endef
    
    $(foreach R,$(REP1) $(REP2) $(REP1)$(REP2),$(eval $(mktgt)))
    PAIRS := $(join $(join $(H1),$(JOIN)),$(H2))
    $(foreach P,$(PAIRS),$(eval $P.txt: $(addsuffix .txt,$(subst _vs_, ,$P))))
    
    # Debugging output
    $(foreach P,$(PAIRS),$(info $P.txt: $(addsuffix .txt,$(subst _vs_, ,$P))))
    
    这将创建(您将从调试输出中看到)目标/先决条件映射。它没有给目标任何配方。我假设您已经有了一个配方,并且您已经将其分配给了所有适当的目标

    如果没有,则添加如下内容:

    $(PAIRS):
            @echo 'Use $^ to generate $@'
    
    应该有用


  • 如何确定
    A\u vs_B.txt
    ?有已知的对吗?它们成对排列吗?以某种模式?任意?它们是由我运行make时设置的两个变量创建的对。使用同一命令生成的只是四个不同的目标,它们的不同之处在于命令中的两个依赖项是参数。我可以写出四条规则,我只是不想让命令重复四次,以备将来需要更改。显示参数/变量以及如何设置它们?当我运行make命令时,我将“REP1=A REP2=B”作为参数。这些数据集是我试图进行一致性分析的数据集。我通过将这两个数据集合并,然后再次拆分来创建其他数据集(因此基本上是将它们混合在一起,我称之为AB.pr1和AB.pr2),并将每个单独的数据集拆分为两部分(我称之为A.pr1、A.pr2、B.pr1和B.pr2)。我现在要做的是在这些数据集的分析结果之间创建四个比较:A_vs_B、A.pr1_vs_A.pr2、B.pr1_vs_B.pr2和AB.pr1_vs_AB.pr2。显然,在makefile中我不会使用“A”和“B”,而是使用“$(REP1)”和“$(REP2)”,但编写A和B会更快。
    $(PAIRS):
            @echo 'Use $^ to generate $@'