【Linux】编写 Makefile

本文详细介绍了使用Makefile进行C和C++项目编译的方法,包括多文件多目录项目的构建,以及单个C和C++文件的编译流程。通过具体的配置示例,展示了如何设置源文件路径、目标文件路径、编译器和编译选项,以及如何定义编译规则和清理规则。

目录

1. 适配多文件多目录

2. 适配单个文件(C)

3. 适配单个文件(C++)


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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值