由浅入深C系列七:工欲善其事,必先利其器,从一个makefile模板开始

简介: 由浅入深C系列七:工欲善其事,必先利其器,从一个makefile模板开始

简介

makefile结构

关于makefile的结构,这个网上介绍的文章很多,就不重复了。需要的读者可以参考网上的文章。这里主要介绍几个重要的内置变量。

$@  表示目标文件
$^  表示所有的依赖文件
$<  表示第一个依赖文件
$?  表示比目标还要新的依赖文件列表

以及几个在makefile里用到的默认规则。

wildcard   
# 扩展通配符 $(wildcard <PATTERN...>) 
# 下面的例子中,$(wildcard ./*.cpp)的用法是
# 将所有的匹配.cpp文件列,展开成一个列表返回

patsubst   
# 替换通配符 $(patsubst <PATTERN>,<DST>,<SRC>),将SRC用PATTERN替换成DST
# 下面的脚本例子中$(patsubst %.cpp,%.o,$(SRCS))的用法是
# 取$(SRC)中的内容,将所有的.cpp替换成.o

makefile实例

TARGET是最终编译后生成的发布目录,执行gmake/make都可以。

# myprogram替换成实际的应用名称
TARGET:=./dist/myprogram
build=release
arch=x86_64

CC=g++

CPPFLAGS=-Wall -std=c++11
INCLUDES=-I./\
         -I./include/rapidxml/\
                 -I./include/nsp/

SRCS+={
   mathJaxContainer[1]}(wildcard ./include/nsp/*.cpp)
OBJS:={
   mathJaxContainer[2]}(SRCS))

LDFLAGS+=-lm -lpthread -ldl -lrt
ifeq ($(build), debug)
        CPPFLAGS+=-g
else
        CPPFLAGS+=-O2
endif

LDFLAGS +=/usr/lib64/libpcap.so \
          ./lib/nshost.so.9.7.8 \
        -Wl,-rpath=/usr/local/lib64/ -L /usr/local/lib64/

{
   mathJaxContainer[3]}(OBJS)
        {
   mathJaxContainer[4]}^ -o {
   mathJaxContainer[5]}(LDFLAGS)

all:
        $(TARGET)

.cpp.o:
        {
   mathJaxContainer[6]}< {
   mathJaxContainer[7]}(INCLUDES) -o $@

.PHONY:clean all install

clean:
        {
   mathJaxContainer[8]}(OBJS) $(TARGET)
相关文章
|
SQL Java 数据库
Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战(上)
Spring Authorization Server 1.1 扩展实现 OAuth2 密码模式与 Spring Cloud 的整合实战(上)
|
9月前
|
测试技术 程序员 API
读书笔记|程序员的README
作者阅读《程序员的README》这本书后结合了自己一年在工作中的经历,总结出程序员工作中的新认知。
|
11月前
|
人工智能 自然语言处理 数据可视化
什么是AIGC?如何使用AIGC技术辅助办公?
2分钟了解AIGC技术及其如何提高日常办公效率!
3644 4
什么是AIGC?如何使用AIGC技术辅助办公?
【已解决】Warning: validateDOMNesting(...): <div> cannot appear as a descendant of <p>
Warning: validateDOMNesting(...): <div> cannot appear as a descendant of <p>
662 0
【已解决】Warning: validateDOMNesting(...): <div> cannot appear as a descendant of <p>
|
自然语言处理 监控 搜索推荐
自然语言处理技术有哪些应用场景?
自然语言处理技术有哪些应用场景?【7月更文挑战第7天】
1202 4
|
关系型数据库 MySQL Linux
DVWA CentOS Could not connect to the MySQL service. Please check the config file.
DVWA CentOS Could not connect to the MySQL service. Please check the config file.
164 0
|
前端开发 安全 搜索推荐
Gitlab配置webhook趟坑全纪录&常见环境问题排查思路与思考总结
是问题,总会有解决办法,一时想不到,不必焦躁,不必死磕,晾一晾,转换一下思路,说不定第二天就会“山重水复疑无路,柳暗花明又一村”!
Gitlab配置webhook趟坑全纪录&常见环境问题排查思路与思考总结
|
机器学习/深度学习 算法 数据挖掘
基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
基于高斯混合模型聚类的风电场短期功率预测方法(Python&matlab代码实现)
513 0
|
资源调度 Dart JavaScript
vue项目:Node Sass to Dart Sass
vue项目:Node Sass to Dart Sass
404 0
|
机器学习/深度学习 人工智能 分布式计算
【DSW Gallery】PAI-DSW开通及授权
本文介绍如何结合AI工作空间开通PAI-DSW并为阿里云子账号授权进行使用。
【DSW Gallery】PAI-DSW开通及授权