- ベストアンサー
Makefileの複数ターゲットの記述法
- Makefileにおける複数ターゲットの記述方法について教えてください。
- 現在A, B, Cの複数のターゲットに対するMakefileを作成していますが、共通化する方法はありますか?
- 共通化のためにpatdubdtやfor eachを使用しましたが、うまくいきませんでした。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
「もう少し詳しく書くと」って書いてるけど, 元の質問文にある Makefile と #1 のお礼にある Makefile って, 全然違うんだよね.... さておき, 最悪 foreach や eval を駆使すればできるが, そこまでせずとも静的パターンルールを使って $(MAIN): %: %.o $(OBJ) gcc $^ -o $@ でいけそうな気はする.
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
makeにもいくつか種類があるので、詳細はそのmakeのマニュアルとかを参考にしてほしいのですが 具体的に「どうやったら」「どううまくいかなった」のでしょう? このような時には、自動変数 $@,$< 等を使ったり、暗黙のルールを使ったりします。 A: A.cc B: B.cc C: C.cc %: %.cc g++ %< -o $@ とか
お礼
ご回答ありがとうございます。 実はA,B,Cはメインプログラムです。 ライブラリを作成するのにsuffix ruleを用いています。もう少し詳しく書くと、 SRC = A.c B.c C.c MAIN = $(basename $(SRC)) OBJ = D.o F.o all:$(MAIN) A:A.o $(OBJ).o gcc $^ -o $@ B:B.o $(OBJ).o gcc $^ -o $@ C:C.o $(OBJ).o gcc $^ -o $@ %.o:%.c gcc -c $< -o $@ のような感じです。 A,B,Cのルールを $(MAIN):$(patsubst %,%.o,$(MAIN)) $(OBJ) gcc $< -o $@ のようにすると A B C: A.o B.o C.o $(OBJ) のように展開されているようでmain fileが複数あるとのエラーが出ます。 また foreachを使ってうまくできないかと思ったのですが、こちらもとん挫してしまいました。 mainfileをmain_A.C, main_B.c, main_D.cなどとして、名前にmainを含むものは、、、といった書き方にすればよいのでしょうか?
お礼
最近Makefileの勉強を始めたものですみません。 コロンを二回続けれるのは初めて知りました。 これでいけました。 ありがとうございます。