简而言之:我想编译来自不同目录的源代码,并将目标文件放入当前目录。
例如,我有文件:
test.c
../../lib1/boot.c
../../lib2/startup.c
../common/utils.c
(还有一些文件.s(程序集)和.cpp,但我希望这不重要)。
我想在当前目录中的所有目标文件:
test.o
boot.o
startup.o
utils.o
而且我不知道如何在我的makefile中编写这样的规则。
例如,
%o.: %.c
现在不起作用,因为make
找不到要构建的规则boot.o
,../../lib1/boot.c
它只能找到要构建../../lib1/boot.o
的规则../../lib1/boot.c
。
我试着用这个:
%o.: %.c
(my compilation line, for example "gcc -c $^ -o $@")
%o.: ../../lib1/%.c
(my compilation line)
%o.: ../../lib2/%.c
(my compilation line)
%o.: ../common/%.c
(my compilation line)
它有效。但这显然不够通用,另外,今天有用户来找我说他的应用程序也有一些../../some_other_lib/common_things.c
,因此我的makefile失败了。我浏览了我们的项目,发现了很多这样的案例,涉及到很多不同的目录。使用我的方法,我必须为每个这样的目录编写一个单独的规则,并使用相同的编译行。这对我来说似乎不太好。
所以我的问题是:如何制定一些通用的编译规则,将目标文件放在当前目录中(并检查),同时使用不同目录中的源进行操作?
谢谢你。