#Makefileの中身を簡略化したい
現在、4つの実行ファイルを一度に生成するMakefileを作成しています。
makefile
1CXX = gcc 2TARGET = hoge1 hoge2 hoge3 hoge4 3CXXFLAGS = -Wall -pthread 4LIBS = 5 6OBJS = $(addsuffix .o,$(TARGET)) 7 8all: $(TARGET) 9 10hoge1: hoge1.o 11 $(CXX) $(CXXFLAGS) -o $@ $< $(LIBS) 12 13hoge2: hoge3.o 14 $(CXX) $(CXXFLAGS) -o $@ $< $(LIBS) 15 16hoge3: hoge3.o 17 $(CXX) $(CXXFLAGS) -o $@ $< $(LIBS) 18 19hoge4: hoge4.o 20 $(CXX) $(CXXFLAGS) -o $@ $< $(LIBS) 21 22%.o: %.c 23 $(CXX) $(CXXFLAGS) -c $< -o $@ $(LIBS) 24 25clean: 26 $(RM) $(TARGET) $(OBJS)
このような感じでmakeをするとちゃんと動作するのですが、
makefile
1CXX = gcc 2TARGET = hoge1 hoge2 hoge3 hoge4 3CXXFLAGS = -Wall -pthread 4LIBS = 5 6OBJS := $(addsuffix .o,$(TARGET)) 7 8all: $(TARGET) 9 10$(TARGET): $(OBJS) 11 $(CXX) $(CXXFLAGS) -o $@ $< $(LIBS) 12 13%.o: %.c 14 $(CXX) $(CXXFLAGS) -c $< -o $@ $(LIBS) 15 16clean: 17 $(RM) $(TARGET) $(OBJS)
こうすると、
makefile
1gcc -Wall -pthread -c hoge1.c -o hoge1.o 2gcc -Wall -pthread -c hoge2.c -o hoge2.o 3gcc -Wall -pthread -c hoge3.c -o hoge3.o 4gcc -Wall -pthread -c hoge4.c -o hoge4.o 5gcc -Wall -pthread -o hoge1 hoge1.o 6gcc -Wall -pthread -o hoge2 hoge1.o 7gcc -Wall -pthread -o hoge3 hoge1.o 8gcc -Wall -pthread -o hoge4 hoge1.o
と、リンク?する際に変数TARGETの先頭のファイルのみの指定となってしまいます。
おそらく、必要なファイル?のところに$(OBJS)とリストで指定しており、
$<を利用しているため先頭のhoge1.oが選択されているのだと思っています。
私的には、ファイル名をターゲットに個別に指定するよりも、変数TARGETに一つ記載しておけば、全部通るMakefileが作りたいと思っています。
何か良い方法はないのでしょうか。ご教示お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/03 07:40
2019/08/03 12:04