LinuxでCで書いた小規模アプリケーション用のmakefileを書き込もうとしています。現在、すべてのソースファイル.c
はトップレベルディレクトリにあり、すべてのヘッダーファイルはインクルードディレクトリにあります。これが私がこれに使用したmakefileです。
IDIR =include
CC=gcc
CFLAGS=-I$(IDIR)
ODIR=obj
_OBJ = main.o kernel.o user_app.o myargs.o ofp_msgs.o pkt_ip.o pkt_ether.o pkt_tcp.o pkt_udp.o pkt_icmp.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
#DEPS = ofp_msgs.h
$(ODIR)/%.o: %.c
$(CC) -c -o $@ $< $(CFLAGS)
all: jam
jam: $(OBJ)
gcc -o $@ $^ $(CFLAGS) -lpthread
.PHONY: clean
clean:
rm -f $(ODIR)/*.o *~ jam
正常に動作しますが、たとえば、サブディレクトリを作成し、"Packet"
すべてのパケット解析ファイル"pkt_ip.c, pkt_tcp.c etc"
をそのディレクトリに配置する必要がありますが、ヘッダーファイルは引き続き最上位ディレクトリに配置する必要があります"toplevel/include"
。私は少し検索を行いましたが、最も一般的な方法は再帰的なmakeを使用することでした。それから私は再帰的なmakeについて不平を言う多くのページを見ます。誰かがこれを正しく行う方法としてこれで私を助けてくれますか?ありがとう