0

我想将源代码和目标代码分开到不同的目录。

以下是我的目录树:

.
|-- bsp
|   |-- Makefile
|   `-- x86
|       |-- begin.s
|       |-- dummy.s
|       |-- helloos.s
|       |-- lowlevel_init.s
|       `-- Makefile
|-- buildrules
|   |-- builder.rules
|   |-- linker.rules
|   `-- subdir.rules
|-- configure
|   `-- helloos.lds
|-- hypervisor
|   |-- font.c
|   |-- int.c
|   |-- int_entry.s
|   |-- Makefile
|   |-- mouse.c
|   `-- start.c
|-- include
|   |-- common.h
|   `-- font.h
|-- lib
|   |-- lib.s
|   `-- Makefile
|-- Makefile
`-- README.md

我想在根(TOP)目录上创建一个“obj”子目录。将所有obj文件放入其中。

如下所示:

.

|-- bsp
|   |-- Makefile
|   `-- x86
|       |-- begin.s
|       |-- dummy.s
|       |-- helloos.s
|       |-- lowlevel_init.s
|       `-- Makefile
|-- buildrules
|   |-- builder.rules
|   |-- linker.rules
|   `-- subdir.rules
|-- configure
|   `-- helloos.lds
|-- hypervisor
|   |-- font.c
|   |-- int.c
|   |-- int_entry.s
|   |-- Makefile
|   |-- mouse.c
|   `-- start.c
|-- include
|   |-- common.h
|   `-- font.h
|-- lib
|   |-- lib.s
|   `-- Makefile
|-- Makefile
|-- obj
|   |-- begin.o
|   |-- dummy.o
|   |-- font.o
|   |-- helloos.o
|   |-- int_entry.o
|   |-- int.o
|   |-- lib.o
|   |-- lowlevel_init.o
|   |-- mouse.o
|   `-- start.o
`-- README.md

然后,这是我的实现:

%.o: %.c
    $(CC) $(CFLAGS) -c -o $(OBJDIR)/$@ $<

%.o: %.s
    $(AS) $(ASFLAGS) -o $(OBJDIR)/$@ $<

但我不喜欢这种实现。

我想这样写:

    $(OBJDIR)/%.o: %.c
        $(CC) $(CFLAGS) -c -o $@ $<


    $(OBJDIR)/%.o: %.s
        $(AS) $(ASFLAGS) -o $@ $<

如果我这样做,请不要遵循这些规则,但它使用隐含规则。

谢谢你的帮助!!!!!!!!!!!!!!!

欢迎任何不解。

4

1 回答 1

0

如果您使用,您的隐含规则将起作用VPATH

VPATH = bsp hypervisor lib

$(OBJDIR)/%.o: %.c
    $(CC) $(CFLAGS) -c -o $@ $<

http://www.gnu.org/software/make/manual/make.html

make 变量 VPATH 的值指定了 make 应该搜索的目录列表。

例如,

 VPATH = src:../headers

指定包含两个目录(src 和 ../headers)的路径,它们按该顺序进行搜索。

使用此 VPATH 值,遵循以下规则,

foo.o : foo.c

被解释为好像是这样写的:

foo.o : src/foo.c
于 2013-03-19T16:40:41.517 回答