Makefile文件书写

单目标Makefile

CXX=g++			#定义编译工具

TARGET=test		#定义编译目标

INCLUDES=		#定义依赖的头文件

#COMMSRCS=*.cpp
COMMSRCS=$(wildcard ./src/*.cpp)
SRCS=main.cpp \ 
			COMMSRCS
OBJECTS=$(SRCS:.cpp=.o)

LDFLAGS=			#定义链接选项
LIBS=					#定义依赖的动态库

CXXFLAGS=	-g 	#定义编译选项

OUTPUT=			#定义目标输出目录

.PHONY : all
all:$(TARGET)

$(TARGET):$(OBJECTS)
	$(CXX) $^ $(LIBS) $(CXXFLAGS) $(LDFLAGS)  -o $(OUTPUT)/$@

.PHONY : clean
clean:
	rm -rf $(OUTPUT)/$(TARGET) $(OBJECT)

动态链接库Makefile

CXX=g++		#定义编译工具

#TARGET=test		#定义编译目标
TARGET=libtest.so		#定义编译目标
INCLUDES=./include/		#定义依赖的头文件

COMMSRCS=$(wildcard ./src/*.cpp)

SRCS=$(COMMSRCS)

OBJECTS=$(SRCS:.cpp=.o)

LDFLAGS=											#定义链接选项
#LIBS= -L/usr/local/lib/ -lpthread -lrt -ldl -lrdkafka -lrdkafka++			#定义依赖的动态库
LIBS= -lpthread -lrt -ldl -lrdkafka -lrdkafka++			#定义依赖的动态库

CXXFLAGS= -g -std=c++11 -fPIC -shared	#定义编译选项

OUTPUT= 		#定义目标输出目录

.PHONY : all
all:$(TARGET)
$(TARGET):$(OBJECTS)
	$(CXX) $(CXXFLAGS) $^  $(LDFLAGS) $(LIBS) -o $@

.PHONY : clean
clean:
	rm -rf $(TARGET) $(OBJECTS)

递归Makefile

方法一:
subsystem:
	cd subdir && $(MAKE)
方法二:
subsystem:
	$(MAKE) -C subdir
eg:
#main
.PHONY : test
test:
    @echo "main makelevel = $(MAKELEVEL)"
    @$(MAKE) -C subdir1 test
    @$(MAKE) -C subdir2 test
    
#subdir1
.PHONY : test
test:
    @echo "subdir1 makedevel = $(MAKELEVEL)"
    @$(MAKE) -C subdir11 test
    
#subdir11
.PHONY : test
test:
    @echo "subdir11 makedevel = $(MAKELEVEL)"

#subdir2
.PHONY : test
test:
    @echo "subdir2 makedevel = $(MAKELEVEL)"

关键变量

NameNote
MAKEMakefile文件中MAKE等价于make
MAKELEVEL递归调用深度
CURDIR执行make命令的当前目录的绝对路径
$@目标文件
$^所有依赖的文件

Make命令

make命令指定路径:${DIRName}/configure && make -C ${DIRName} && make -C install

语法

日志打印

$(warning $(XXX)) 打印变量的值

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值