5、目录分离¶
大部分的工程需要分离src、obj、bin,如下:
./
./Makefile
./src/*.c;*.h
./obj/*.o
./bin/<executable>
基于上一个例子修改如下:
# ------------------------
# Generic Makefile
# ------------------------
# Project name
Target = target
# Compile command and flag
CC = gcc
CFLAG =
# Linker command and flag
LINKER = gcc
LFLAG =
# Dir
SRC_DIR = src
OBJ_DIR = obj
BIN_DIR = bin
# Source files
SOURCES := $(wildcard $(SRC_DIR)/*.c)
# OBJECT files
OBJECTS := $(SOURCES:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
# Header files
INCLUDES := $(wildcard $(SRC_DIR)/*.h)
$(BIN_DIR)/$(Target) : $(OBJECTS)
$(LINKER) -o $@ $(LFLAG) $(OBJECTS)
@echo "Linking complete!"
$(OBJECTS) : $(OBJ_DIR)/%.o : $(SRC_DIR)/%.c
$(CC) $(CFLAG) -c $< -o $@
@echo "Compilation complete!"
PHONY: clean
clean :
rm -rf $(BIN_DIR)/$(Target) $(OBJECTS)
@echo "Cleanup complete!"
注解
基本上只是单纯的定义目录,然后目标文件放到对应目录 。