makefile 简要用法

自己使用makefile简要记录,目录如下:

### 1. make简单初使用
######------------------------#####
CC = g++
src = test.cpp
obj = test.o
exec = test

#格式如下

# 目标文件 :依赖文件
    # 执行命令行

$(exec):$(obj)
	$(CC) $(obj) -o $(exec) 
	#g++ test.o -o test

$(obj):$(src)
	$(CC) $(src) -c
	#g++ test.cpp -c

.PHONY:clean   #.PHONY 伪目标,防止与目标文件相重
clean:
	-rm $(obj) $(exec) # 类似bash里面的命令
######------------------------#####
### 2. make编译ssh
######-----------------------------------------------------------#####
CC = g++
src = encryption.cpp
obj = encryption.o
exec = encryption

$(exec):$(obj)
# -L 链接库文件所在路径 \ -l 链接库名 libcypto.so 
    # $(CC) $(obj) -o $(exec) -L /home/zjl/anaconda3/ssl -l crypto
# 若库名位于 /lib, /usr/lib 和 /usr/local/lib 下,可以直接使用 -l 而不需要 -L
	$(CC) $(obj) -o $(exec) -l crypto

# $(obj):$(src)
# 	$(CC) $(src) -c

# 可以自动从-cpp文件推导得到-o文件 -->隐式规则
$(obj):

.PHONY:clean
clean:
	-rm $(obj) $(exec)
# 删除产生的密钥文件
	-rm *.pem
######-----------------------------------------------------------#####
### 3. make编译protobuf

3.1 利用伪目标直接Bash 编译(可拓展性不强)
######------------------------------#####
all:address
address:
    protoc address.proto --cpp_out=.
######------------------------------#####

3.2 编译多个
######-----------------------------------------------------------#####
PROTOCC = protoc
INCLUDE = .
#注意这里-- cpp_out=. 不要有多余的空格
PROTO_FLAG = --cpp_out=$(INCLUDE)

PROTO_SOURCES = $(wildcard *.proto)
# # $(warning $(PROTO_SOURCES))  # 输出变量值

OBJ := $(PROTO_SOURCES:%.proto=$(INCLUDE)/%.pb.cc)
OBJ += $(PROTO_SOURCES:%.proto=$(INCLUDE)/%.pb.h)

# OBJ := $(patsubst %.proto, $(INCLUDE)/%.pb.cc, $(wildcard  *.proto))
# OBJ += $(patsubst %.proto, $(INCLUDE)/%.pb.h, $(wildcard  *.proto))
# $(warning $(OBJ))

all:$(OBJ) #$(OBJ)虽然没有直接在下文体现,但貌似支持了 %.pb.cc 这种语法

.PHONY:all
$(INCLUDE)/%.pb.cc : %.proto
	$(PROTOCC)  $^ $(PROTO_FLAG)    #  $^ == %.proto == 所有依赖文件
	@echo 'generate file' $@

clean:
	-rm *.pb.cc *.pb.h
######-----------------------------------------------------------#####
### 4. make进阶使用
######-----------------------------------------------------------#####
# 告诉make
vpath %.cpp src      #当前文件目录下不存在.cpp文件时,到src文件夹查找
vpath %.h include    #                   .h           include
# 告诉编译器
CC = g++
CPPFLAG = -I include
SRC = hello.cpp
INCLUDE = hello.h
OBJ = hello.o
EXEC = hello

$(EXEC) : $(OBJ)
	$(CC) $^ -o $@  # $@ == $(EXEC) == 目标文件

$(OBJ) : $(SRC) $(INCLUDE)
	$(CC) $(CPPFLAG) -c $<  # $< == $(SRC) == 第一个依赖文件

.PHONY:clean
clean:
	-rm $(OBJ) $(EXEC)
######-----------------------------------------------------------#####

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值