【发布时间】:2016-05-27 18:16:08
【问题描述】:
在当前的 C 项目中,我们有一个坏主意,将所有目标文件与源文件放在不同的文件夹中。起初管理起来并不复杂,但现在我们需要在特定文件夹中编译一些文件,而在另一个文件夹中编译其他文件。
树枝看起来像:
- objs1
- objs2
- 源
- file1.c
- file2.c
运行make 后,我希望将树状修改为:
- objs1
- file1.o
- objs2
- file1.o
- file2.o
起初makefile是这样的:
CSRC = $(wildcard *.c)
OBJS = $(CSRC:%.c=%.o)
objs1/%.o : %.c
gcc -c -o $@ $<
现在还有file2.c,它不应该在objs1中编译,file1.o应该在objs1和objs2中,file2.o应该在objs2中。
我使用通用规则是因为项目比较大,而且真的很方便。
所以我有两个包含对象名称的变量,一个用于 objs1,另一个用于 objs2。
我想做类似的事情
$(OBJS1): %.o %.c
但它会像源文件在 objs1 中一样,但事实并非如此。
那么将通用规则与指定位置结合起来的方法是什么?
谢谢
【问题讨论】:
-
如果
objs1/file1.o和objs2/file1.o是从同一个源文件编译的,它们有何不同?他们遵守不同的选择吗? -
是的,一个编译为标准对象,另一个编译为先绑定到 JNI,然后编译为库。
标签: makefile