1

私はmakeファイルを書くことに比較的慣れていないので、いくつかのポインタを使うことができました。私が達成しようとしているのはおそらくかなり基本的なことですが、Web を検索した後、その方法を理解できません。

オブジェクト ファイルのセットを src ディレクトリからビルド ディレクトリにコンパイルしたいのですが、私の素朴な考えは、ソース ファイルのセットをマクロとして定義し、マクロ修飾子を使用してオブジェクト ファイルのマクロを作成することでした (これらがオブジェクト ファイル マクロを作成するための現在のスキームは次のようになります。

SRCDIR = /some/dir/
BUILDDIR = /some/dir/
CSRC = \
        $(SRCDIR)f1.c \
        $(SRCDIR)f2.c \

OSRC = $(CSRC,.c=.o,F,<$(BUILDDIR))

all:
    @echo $(OSRC)

all ルールは、オブジェクト ファイル マクロが正しく設定されているかどうかを確認するために単純に挿入されます。残念ながらそうではなく、空です。交換する

OSRC = $(CSRC,.c=.o,F,<$(BUILDDIR))

OSRC = $(CSRC:.c=.o)

オブジェクトファイルのマクロを提供しますが、適切なディレクトリは提供しません。したがって、ファイルを変更して必要なものを取得する方法についての洞察をいただければ幸いです。(私は GNU Make 3.82 を使用しています)

4

1 に答える 1

2

あなたがどこにいるのかわからない$(CSRC,.c=.o,F,<$(BUILDDIR)); GNU make には、その構文のようなものはまったくありません。

このステートメント$(CSRC:.c=.o)はすべての.c接尾辞を.oに置き換えますが、ディレクトリも置き換えたいため、これは役に立ちません。

$(patsubst ...)次の関数を使用する必要があります。

OSRC = $(patsubst $(SRCDIR)%.c,$(BUILDDIR)%.o,$(CSRC))
于 2013-11-13T19:31:51.863 に答える