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

root(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の2つのディレクトリを含むパスを指定します。これらのディレクトリは、この順序で検索を行います。

このVPATHの値を使用すると、次のルールが適用されます。

foo.o : foo.c

次のように記述されているかのように解釈されます。

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