Makefileで1:1の依存関係を生成する一般的な方法はを使用することです%
。
%o:%cc
.cc
50個のファイルがあり、そのうち3個だけに興味があるとしましょう。私は彼らの基本的な名前のリストを作成しました。
CC_BASENAMES := Source15 Source32 Source41
.o
を繰り返す方法の$(CC_BASENAMES)
効果は次のとおりです。
Source15.o: Source15.cc
Source32.o: Source32.cc
Source41.o: Source41.cc
答え1
何を求めるのかはわかりませんが、文字列を操作する簡単な方法がいくつかあります。
.o
たとえば、各デフォルト名にサフィックスを追加できますOBJS = $(addsuffix .o,$(CC_BASENAMES))
。
たとえば、あるサフィックスを別のサフィックスに変換できます$(OBJS:.o=.cc)
。たとえば、必要なものはMakefileです。
CC_BASENAMES := Source15 Source32 Source41
OBJS = $(addsuffix .o,$(CC_BASENAMES))
SRCS = $(OBJS:.o=.cc)
fred.o: $(SRCS)
cc $(SRCS) -o fred.o
あるいは、より一般的には、まずSRCSを定義し、そこからOBJSを派生させます。
依存関係ルールを特定のターゲットにのみ適用するには、次を使用できます。ターゲット:ターゲットモード:前提条件モードつまり
$(OBJS): %.o: %.cc
バラより誰が作った。
答え2
一般的なビルドルール(例)があるため、毎回50個のソースファイルをすべて確認する必要%o:%cc
はありません。make
あなたがする必要があるのは、必要な出力を指定してからルールを適用してmake
それを構築することです。たとえば、次のように実行できます。
$ make Source15.o Source32.o Source41.o
コマンドラインまたはmakefileから特定のターゲットを作成する
my_build: Source15.o Source32.o Source41.o
その後、ターゲットを構築するように依頼しますmake
。
$ make my_build