0

プロジェクトのmakefileフレームワークを書いています。たとえば、トップディレクトリにmain.cがあり、多くのサブディレクトリにそれぞれCファイルが含まれています。すべてのオブジェクトファイルを一緒にリンクするために、一番上のmakefileに初期値を割り当てます。

export TARGET_LIST := main.o

そして、各サブディレクトリで、それらをリストに追加します。

# sub1/Makefile
TARGET := a.o                                                                                                                                                          
TARGET_LIST += $(TARGET)

最上位のディレクトリに戻っても、TARGET_LISTはmain.oのままです。すべてのサブディレクトリが入力されていると確信しています。これを行うための良い方法はありますか?

最上位のmakefile:

all: main

export TOP_DIR = $(shell pwd)
export TARGET_LIST := main.o
SUBDIRS := a b c d

CFLAGS := -Iinc

all:main

main:main.o subdirs
        cc $(TARGET_LIST) -o $@ $(CFLAGS)

subdirs: $(patsubst %, _dir_%, $(SUBDIRS))

$(patsubst %, _dir_%, $(SUBDIRS)) :
        $(MAKE) -C $(patsubst _dir_%, %, $@) $(TGT)

Rules.make:

all:$(TARGET)

%.o:%.c
        @echo $(TARGET_LIST)
        $(CC) -c $^ -o $@ $(CFLAGS) $(LDFLAGS)

サブディレクトリmakefile:

TARGET := a.o
TARGET_LIST += $(TARGET)
CFLAGS := 
LDFLAGS := 

include $(TOP_DIR)/Rules.make
4

1 に答える 1

1

できれば高レベルのビルドシステムを使用してください。ほとんどの場合、手書きの Makefile よりも優れています。たとえば、 CMakeSCons、またはwafは、より一般的な代替手段の一部です。

于 2012-06-05T04:53:44.773 に答える