0

カスタムファイルシステムを作成する Makefile を作成しようとしていますが、問題はその中にいくつかのパッケージをコピーすることです。含める必要があるすべてのパッケージを含むディレクトリを処理する必要がありますが、各パッケージには、その依存関係を説明する関連ファイルが含まれている場合と含まれていない場合があります。これが私がやろうとしたことの抜粋です:

PKGS_DIR := $(shell pwd)/packages
PKGS := $(wildcard $(PKGS_DIR)/*.pkg)

.PHONY: $(PKGS)

define getdeps
    @if [ ! -f $(2)/$(1) ]; then \
        echo $(1) >> $(BASE_DIR)/deplist.tmp; \
        if [ -f $(PKGS_DIR)/$(1).dep ]; then \
            depapps=`cat $(PKGS_DIR)/$(1).dep`; \
            $(foreach depapp,$$depapps,\
                $(call getdeps,$(depapp),$(BASE_DIR)/optional); \
            ) \
        fi \
    fi
endef

$(PKGS):
    @echo processing $(notdir $@)
    $(call getdeps,$(notdir $@),$(BASE_DIR)/optional)

このコードでは、無限ループに入るため、私のメイクファイルがクラッシュし、その理由がわかりません。私の質問は: マクロ定義で再帰呼び出しを行うことは可能ですか? これを実装するより良い方法はありますか?おそらく、シェル スクリプトを使用してこれを実装し、makefile 内で呼び出す方がよいでしょう。

どんな提案でも本当に感謝します。

前もって感謝します

4

0 に答える 0