Makefile作成
1892 ワード
プロジェクトではMakefileの作成が必要になることが多いが、一部の文字の意味を忘れがちなことがあるため、Makefileの詳細な説明ではなく、直接的な参考にするために、このMakefileブログを特筆した.
次は私のプロジェクトカタログの図です.
Makefileには、(1)$@--ターゲットファイル;
(2)$^--すべての依存ファイル;
(3)$
以下に示すMakefile作成では、ソースファイル、ヘッダファイル、ライブラリなど、対応する変数に直接追加することで、大規模なエンジニアリングのワンタッチコンパイルを実現できます.
1.一般的なMakefileスクリプトの例
# Makefile,
# main
# -lm
main:cjsonmain.o cJSON.o
gcc -o main cjsonmain.o cJSON.o -lm
main.o:cjsonmain.c cJSON.h
gcc -g -c cjsonmain.c
cJSON.o:cJSON.c cJSON.h
gcc -g -c cJSON.c
clean:
rm -rf *.o main
次は私のプロジェクトカタログの図です.
2、アップグレード版のMakefileスクリプトの例
Makefileには、(1)$@--ターゲットファイル;
(2)$^--すべての依存ファイル;
(3)$
# makefile
# CC :
# CFLAG :
# target :
# $(target) : target
# $@ :
# $^ :
# $< :
CC=gcc
CFLAG= -g
target=app
$(target):xxx.o aff.o
$(CC) $(CFLAG) -o $@ $^
xxx.o:xxx.c aff.h
$(CC) -c $< -o $@
aff.o:aff.c aff.h
$(CC) -c $< -o $@
clean:
rm -rf *.o $(target)
3、再アップグレード版Makefile(完全にワイルドカードで作成)
以下に示すMakefile作成では、ソースファイル、ヘッダファイル、ライブラリなど、対応する変数に直接追加することで、大規模なエンジニアリングのワンタッチコンパイルを実現できます.
COMPILE_COMPILER=
TARGET=app
CC = $(CROSS_COMPILER)gcc
LD = $(CROSS_COMPILER)gcc
CPP = $(CROSS_COMPILER)g++
#
DIR_PRJ:=$(shell pwd)
DIR_INC:=$(DIR_PRJ)/inc
DIR_SRC:=$(DIR_PRJ)/src
# *.h
INCLUDE+=-I$(DIR_PRJ)/
INCLUDE+=-I$(DIR_INC)/
INCLUDE+=-I$(DIR_INC)/soap
# *.c
SRC:=$(wildcard $(DIR_PRJ)/*.c)
SRC+=$(wildcard $(DIR_SRC)/*.c)
# flag
CFLAGS+=-g -I$(INCLUDE)
CPPFLAGS+=-g -I$(INCLUDE)
#
LIBS=-lpthread
LIBS+=
STATIC_OLIB+=
# flag
LDFLAGS+=-g -I$(INCLUDE)
OBJS := $(SRC:.c=.o)
DEP := $(OBJS:.o=.d)
all: $(TARGET)
$(TARGET):$(SRC) $(OBJS)
$(LD) $(LDFLAGS) $(OBJS) $(STATIC_OLIB) $(LIBS) -o $@
-include $(DEP)
%.o:%.c
$(CC) $(INCLUDE) $(CFLAGS) -MM -MT $@ -MF $(patsubst %.o, %.d, $@) $<
$(CC) $(INCLUDE) $(CFLAGS) -c $< -o $@
%.o:%.cpp
$(CPP) $(INCLUDE) $(CPPFLAGS) -c $< -o $@
clean :
rm -f $(TARGET) $(OBJS) $(DEP) *.o