希望这是一个关于make模式规则的基本问题:我想在规则的先决条件中不止一次使用通配符,即在我的Makefile中我有

data/%P1.m: $(PROJHOME)/data/%/ISCAN/%P1.RAW
        @echo "  Writing temporary matlab file for $*"
        # do something

data/%P2.m: $(PROJHOME)/data/%/ISCAN/AGP2.RAW
            @echo "  Writing temporary matlab file for $*"
            # do something

在这个例子中,我尝试在通配符%为AG时调用make。 两个文件$(PROJHOME)/data/AG/ISCAN/AGP1.RAW和$(PROJHOME)/data/AG/ISCAN/AGP2.RAW存在。 我尝试以下make命令并获得此输出:

[jshen@iLab10 gender-diffs]$ make data/AGP1.m
make: *** No rule to make target `data/AGP1.m'.  Stop.

[jshen@iLab10 gender-diffs]$ make data/AGP2.m
Writing temporary matlab file for AG, part 2...

[jshen@iLab10 gender-diffs]$ ls data/AG/ISCAN/AG*
data/AG/ISCAN/AGP1.RAW  data/AG/ISCAN/AGP2.RAW

如何在第一个make规则中实现同一个通配符的多个实例?

#1楼 票数:4 已采纳

这似乎工作:

.SECONDEXPANSION:    
data/%P1.m: $(PROJHOME)/data/$$*/ISCAN/$$*P1.RAW
            @echo "Writing temporary matlab file for $*, part 1..."

  ask by johndashen translate from so

未解决问题?本站智能推荐:

3回复

makefilepatternrule,目标文件名中包含更多通配符

我需要创建一个特殊的makefile规则,最好用一个例子来解释。 也许我们用规则创建文件 它工作正常。 只是认为发生了更多像上面那样的模板,人们可能会想到一个通配符规则 WILDCARD由make决定。 是否有可能建立这样的规则?
1回复

将模式规则用于多个先决条件和多个目标

我在make遇到问题,无法弄清楚如何解决。 我想使用Shell脚本转换子目录中的每个文件。 这是我写的: makefile可以工作,但是它仅对第一个.in文件运行脚本,然后停止。 很抱歉这个愚蠢的问题,但我无法解决!
3回复

makefile:先决条件中的%pattern$(变量)

我有这样的东西有效: 这就是我想要做的但它不起作用: 它总是说没有什么可做的,因为目标是最新的。 我觉得问题可能是在每个制作阶段都做了什么,我的意思是,首先做的是%或$。 它应该工作得很好吗?
2回复

Makefile规则中的通配符

我在Makefile中有以下规则 其中genimg.py是一个脚本,该脚本基于*.dat文件中的数据和存储在目标文件名称( genimg.py )中的参数生成图像。 是否可以将所有这些规则组合成一个规则? 我尝试了明显的方法: 但这不起作用。
1回复

在Makefile中,如何定义通配符模式?

我的目录中有许多名称相似的文件:test1.cpp,test2.cpp,test3.cpp等。我想将所有测试文件编译成可执行文件test1,test2,test3等。它们不必链接到每个文件其他。 我不想使用test1,test2,而是要使用通配符或模式匹配或类似的东西。 我该怎么做呢?
1回复

带变量的Makefile、条件和通配符

我的 makefile 有问题。 我想要一个“主”目标,它可以自动处理各种目录并将它们复制到特定位置。 但不知何故,带有通配符的 ifneq 条件无法正常工作,无论条件是否满足,我总是得到相同的结果。 我正在尝试: 例如,在 $(TOP)/flow 中存在一个目录core但不存在pwr 。 Mak
1回复

Makefile多个主用通配符

我想编译在包含许多主要功能的文件夹中自动找到的许多主要功能。 就目前而言,我拥有的这段代码当然不适用于多个主代码。 如何为每个主线正确分割$(MAINS_OBJECTS) ? 谢谢 !
1回复

通配符中的Makefile源

我不知道如何在 * 内部制定依赖规则:folder1/folder2/*/sch.oa 到目标:folder3/*.scs 在此先感谢您的帮助