是否可以匹配make文件中的集合?

时间:2011-10-19 11:55:06

标签: c makefile pattern-matching

我有一个make文件,它使用模式匹配来使用如下规则自动编译:

%.o : %.c
    gcc -c $<

然而,在这个项目中,我有许多源文件,它们的扩展名有所不同。有没有办法匹配make文件中的集合,就像在正则表达式中一样。

伪示例:

%.o : %.[cC]
    gcc -c $<

不可能简单地更改源文件的大小写,因为这用于模块测试现有项目,该项目混合了其他几个模块。

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。事实证明,makefile有几个问题。

首先,我发布的例子实际上就像班塔尔指出的那样。但是我的问题是我的源文件不在根目录中,而是在我添加到vpath的src /子目录中。老实说,我认为这与我的问题无关,因为我相信make会自动扫描其源文件的vpath。原来vpath不适用于规则检查。

要使其正常工作,请执行以下操作:

vpath = %.c src
vpath = %.C src

%o : src/%.[Cc]
    gcc -c $<

接下来,当我正在研究如何完成它的示例时,make有时会在我背后构建源文件。如果你这样做:

all : main.o
    gcc -o test main.o

...并且没有规则来构建.o文件make将使用隐式inbuild规则构建它。相当混乱。可以使用-r标志禁用它。

make -r all

使用gcc编译.C文件而没有任何额外选项将导致链接器错误,因为gcc将.C文件解释为C ++文件为默认值。为了编译为C文件,请使用-x标志。

%.o : %.C
    gcc -x c -c %<

希望这有助于某人。

答案 1 :(得分:0)

我能看到的最简单的选择就是链接不匹配的案例:

%.c : %.C
        ln $< $@

让规则链完成剩下的工作。