C++编译之make cmake bazel模板

​前面文章介绍了C++编译过程:预处理、编译、汇编、链接,内容比较简单,只要会使用命令行,就能根据文章的内容实践操作,直观的了解编译全过程。

一个项目往往不只一两个cpp文件,此时命令行编译的方式就会显得捉襟见肘。然而在实际项目中,有序构建并不需要开发人员投入太多精力,这就必须要用到编译脚本,了解一两个常用命令,就可以搞定这个复杂的过程。

如果要说什么是C++开发中可以真正做到一劳永逸的事情,那就是编译脚本。编译脚本是一个规则描述文件,配合工具就可以完成编译,其维护成本极低,只需要参考模板简单改改,就可以拿来直接用,岂不美哉。

make与Makefile

make是上个世纪70年代诞生的工具,能够沿用至今,必属经典。

大型工程的编译面临依赖多、耗时长的问题,有时候你只改了一小段代码,却要等好几十秒甚至几分钟来等待编译结果。在企业级的中心化构建系统中,还可能会存在队列等待的问题。

其实大型工程也是基于一些基础的小工程构建的,将大型工程用可插拔的理念,拆分成一个个小单元,那么在这些小的单元中,其实用不到太复杂的构建系统,选择make可以快速验证demo程序是否符合预期。没有RPC、网络、权限校验、流程等诸多工程问题。

make指令需要一个构建规则,这个规则默认放在Makefile中,当然也可以通过-f参数指定规则文件。话不多说,直接上菜:

$(shell if [ ! -d sbin ]; then mkdir sbin; fi;)
TAR := ./sbin/cppcompiletemplate
CXX := g++ # -m32

SOURCES :=$(wildcard *.cpp) $(wildcard *.c) $(wildcard *.hpp) $(wildcard *.cc)
AllDirs := $(shell ls -R | grep '^\./.*:$$' | awk '{gsub(":","");print}' | grep -vE 'cmakebuild|sbin')
$(info AllDirs: $(AllDirs))
SOURCES += $(foreach subdir,$(AllDirs),$(wildcard $(subdir)/*.cpp) $(wildcard $(subdir)/*.c)) # 遍历子目录

COPTION := -W -Wall -Wfatal-errors -fpermissive # -Werror -Wshadow -Wdouble-promotion -fno-common -Wconversion
#COPTION += -Wno-unused-function -Wno-error=missing-field-initializers

CFLAGS := -pthread -std=c++11 $(COPTION)
CFLAGS_DEBUG := -g -O0
CFLAGS_RELEASE := -s -O2 -static-libstdc++ -static-libgcc # -static

###############################################################################################################
DEFS := #-DNDEBUG
CFLAGS += # -pg
INC := # -I ./3rdlib/jsoncpp/include
LIB := # ./3rdlib/jsoncpp/lib/libjsoncpp.a
LFLAGS := -pthread #-lrt -ldl
###############################################################################################################

all: $(TAR)
debug:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值