Makefile作成


プロジェクトではMakefileの作成が必要になることが多いが、一部の文字の意味を忘れがちなことがあるため、Makefileの詳細な説明ではなく、直接的な参考にするために、この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