この例は、Makefileをエレガントに作成する方法を示しています。

  Makefileの章のストーリーは長い間更新されていません。今回は、シンプルで実用的なMakefileの書き方を紹介しました。これは、以前の概要のコレクションと見なすことができます。次の例は非常に単純です。私は実際にプログラミングをしています。で使用されているデモは、英語の注釈が少し付いているので、一目で簡単に確認できます。
  ●-コンパイルプロセスの中間ファイルはBUILD_DIRに配置されます;
  ●-コンパイルによって生成された実行可能ファイルはOBJ_DIRに配置されます;
  ●-ターゲットファイルはTARGETです;
  ●-ソースコードディレクトリはSRC_DIRです;

# name the target project
TARGET = test_demo

# compile tool
CC = gcc

BUILD_DIR = ./build
OBJ_DIR = ./bin

#SRC_DIR for source code
SRC_DIR	=./

VPATH = $(SRC_DIR)

# the path of the head files
INCLUDE_DIR=-I/usr/local/include
 
# load lib   -L load path of the lib ; -l load name of the lib
LIBS	= -lpaho-mqtt3c

# Macro definition	
DEFS = -D_POSIX_C_SOURCE=1
# compile option(-wall output warning message; -O optimize compile)
CFLAGS	= -Wall -O3 -std=c99
CFLAGS  += $(DEFS)

#replace *.c to *.o from variable SOUTCE_C, and get the name string to variable OBJECT_O 
SOURCE_C	= $(foreach dir, $(SRC_DIR), $(wildcard $(dir)/*.c))
OBJECT_O	= $(addprefix $(BUILD_DIR)/,$(patsubst %.c,%.o,$(notdir $(SOURCE_C))))

#.c.o:
$(BUILD_DIR)/%.o: %.c
	$(CC) -c $(CFLAGS) $(INCLUDE_DIR) $< -o $@
 
$(TARGET): $(OBJECT_O)
	$(CC) ${
    
    CFLAGS}   $(OBJECT_O) $(LIBS) -o $(OBJ_DIR)/$@
	@echo "********************"
	@echo "***Build Finished***"
	@echo "********************"

.PHONY: clean 
clean:
	rm $(TARGET) $(BUILD_DIR)/*.o -rf
	@echo "********************"
	@echo "***Clean Finished***"
	@echo "********************"

おすすめ

転載: blog.csdn.net/qq_33475105/article/details/115011802