当C文件具有不同的路径时,如何编写规则来构建目标文件

时间:2012-03-10 20:16:06

标签: makefile

我有一堆C文件,每个文件都有不同的路径,所以我有类似

的东西
SRC=/path1/path2/file1.c file2.c /usr/joe/files/file3.c

我想从构建目录中的每个C文件构建目标文件,所以我做了:

SRCBASE=$(notdir $(SRC))

OBJS= $(addprefix $(OBJDIR)/,$(SRCBASE:.c=.o))

这很好用,我得到的OBJS是build / file1.o build / file2.o build / file3.o

我的问题是如何编写隐式规则来构建目标文件,我试着这样做:

build/%.o : %.c
gcc ....

但这似乎现在可行,因为此规则没有捕获具有完整路径的文件。 我试着看看gnu make,但没有在那里找到答案。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用VPATH查找其他目录中的文件。请注意,这会进行隐式搜索,而不是使用显式路径。也就是说,你指定你需要file1.o到file3.o,make应首先在.,然后在/path1/path2,然后在/usr/joe/files;因此,如果 。包含一个file3.c您将获得该/usr/joe/files而不是/path1/path2中的一个(如果没有,但如果{{1}}中有一个,您将获得该一个)。

事实证明,无论如何,路径搜索比显式位置更有用,所以通常这就是你想要的。如果您需要覆盖某些内容,只需将“所需版本”复制或符号链接到要搜索的第一个位置。

相关问题