目录
1. 适配多文件多目录
####################################################
#####Copyright (c) 2019, code farmer from sust.#####
###############All rights reserved.#################
.PHONY: clean install
# multi file
INC = ./include
SRC = ./src
OBJ = ./obj
BIN = ./bin
BIN_TARGET = $(BIN)/test
CC = gcc
CFLAGS = -g -Wall -I$(INC)
# match *.c
SOURCE = $(wildcard $(SRC)/*.c)
# replace *.o with *.c
OBJECT = $(patsubst %.c, $(OBJ)/%.o, $(notdir $(SOURCE)))
$(BIN_TARGET):$(OBJECT)
$(CC) $(CFLAGS) $(OBJECT) -o $@
$(OBJ)/%.o:$(SRC)/%.c
$(CC) $(CFLAGS) -c $< -o $@
# echo debug info
echo:
@echo $(CC)
@echo $(SRC)
@echo $(INC)
@echo $(OBJ)
@echo $(BIN)
install:
install -m 755 $(BIN) /usr/local/bin
clean:
-rm -rf $(OBJECT) $(BIN_TARGET)
2. 适配单个文件(C)
####################################################
#####Copyright (c) 2019, code farmer from sust.#####
###############All rights reserved.#################
.PHONY: clean install ALL
CC = gcc
#CFLAGS = -g -Wall -fno-stack-protector
CFLAGS = -g -Wall -DDEBUG
# match *.c
SOURCE = $(wildcard ./*.c)
# replace * with *.c
#BIN = $(patsubst %.c, %, $(notdir $(SOURCE)))
BIN = $(basename $(SOURCE))
ALL: $(BIN)
%: %.c
$(CC) $(CFLAGS) $< -o $@
# echo debug info
echo:
@echo $(CC)
@echo $(SOURCE)
@echo $(BIN)
install:
install -m 755 $(BIN) /usr/local/bin
clean:
-rm -rf $(BIN)
3. 适配单个文件(C++)
####################################################
#####Copyright (c) 2019, code farmer from sust.#####
###############All rights reserved.#################
.PHONY: clean install ALL
CC = g++
CFLAGS = -g -Wall -std=c++11
#CFLAGS = -g -Wall -Wno-int-to-pointer-cast -Wpointer-to-int-cast -fno-stack-protector
# for std::thread
#THREAD_FLAGS = -Wl,--no-as-needed -pthread
# match *.c*
SOURCE = $(wildcard ./*.c*)
BIN = $(basename $(SOURCE))
ALL: $(BIN)
%: %.c*
$(CC) $(CFLAGS) $(THREAD_FLAGS) $< -o $@
# echo debug info
echo:
@echo $(CC)
@echo $(SOURCE)
@echo $(SUFFIX)
@echo $(BIN)
install:
install -m 755 $(BIN) /usr/local/bin
clean:
-rm -rf $(BIN)
本文详细介绍了使用Makefile进行C和C++项目编译的方法,包括多文件多目录项目的构建,以及单个C和C++文件的编译流程。通过具体的配置示例,展示了如何设置源文件路径、目标文件路径、编译器和编译选项,以及如何定义编译规则和清理规则。

9242

被折叠的 条评论
为什么被折叠?



