13

make ファイルを作成するために必要な C++ コードがいくつかあります。.h と .C の各ペアがオブジェクトを作成し、いくつかのオブジェクトがリンクされて実行可能ファイルを形成します。かなり標準的なもの。

この非 gnu の make コマンドは、すべてのファイルをディレクトリ内のオブジェクトにビルドするだけです。

%.o:%.C
    $(CC) $(CPFLAGS)  -c  $<

これが行うことは、各 %.C ファイル (つまり、すべての .C ファイル) に対して、対応する .o ファイルを構築することです。

gmakeでこれを行う方法を知っている人はいますか?

乾杯

マーク

4

2 に答える 2

26

あなたが示した構文は、GNU make 用語ではパターン規則と呼ばれ、ソリューションの礎石を形成します。必要なのは、.C ファイルのリストを動的に取得する方法を追加することだけです。他の人はこれを行うために使用するソリューションを示しています$(shell)が、それは不必要に非効率的です. 代わりに、この目的のために設計された GNU make 組み込み関数である $(wildcard) を使用することをお勧めします。

SRCS = $(wildcard *.C)
OBJS = $(patsubst %.C,%.o,$(SRCS))
foo: $(OBJS)
        $(CC) -o $@ $^

%.o: %.C
        $(CC) $(CPFLAGS)  -c  $<

より簡潔なものを探している場合は、次も機能します。

foo: $(patsubst %.C,%.o,$(wildcard *.C))

%.o: %.Cこれは単に変数を排除し、GNU make がデフォルトのパターン規則と、一連のオブジェクトから実行可能ファイルをリンクするためのデフォルト規則を提供するという事実を利用します。個人的には、読みやすく維持しやすいので、より詳細なバージョンを使用しますが、それぞれ独自のものです。

それが役立つことを願って、

エリック・メルスキー

于 2009-08-28T07:16:33.137 に答える