我有一堆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,但没有在那里找到答案。
非常感谢。
答案 0 :(得分:1)
您可以使用VPATH
查找其他目录中的文件。请注意,这会进行隐式搜索,而不是使用显式路径。也就是说,你指定你需要file1.o到file3.o,make应首先在.
,然后在/path1/path2
,然后在/usr/joe/files
;因此,如果 。包含一个file3.c
您将获得该/usr/joe/files
而不是/path1/path2
中的一个(如果没有,但如果{{1}}中有一个,您将获得该一个)。
事实证明,无论如何,路径搜索比显式位置更有用,所以通常这就是你想要的。如果您需要覆盖某些内容,只需将“所需版本”复制或符号链接到要搜索的第一个位置。