makefile文件解释

news/2025/2/21 4:36:16/

makefile文件解释

  • makefile文件
  • 详细解释

makefile文件

CC = g++PROGRAM = ubuntuopenglSRC = $(wildcard ./*.cpp)OBJECTS = $(patsubst %.cpp,%.o,$(SRC))LIBS = -lX11 -lGL -lGLEW%.o: %.cpp$(CC) $(LIBS) -c -o $@ $< $(PROGRAM): $(OBJECTS)$(CC) -o $@ $(OBJECTS) $(LIBS)clean:-rm -f $(PROGRAM)-rm -f $(OBJECTS)

详细解释

目标:通常是要产生的文件的名称,它可以是可执行文件(OBJ文件),也可是一个执行的动作名称,如‘clean’。
依赖:用来输入从而产生目标的文件,一个目标经常有几个依赖。
命令:Make执行的动作,一个规则可以含有几个命令,每个命令占一行。
注意:每个命令行前面必须是一个Tab字符,即命令行第一个字符是Tab。
指令

$(var)

$(var) 变量引用

CC = g++

CC:makefile隐含变量,默认选择gcc编译器,这边使用g++

PROGRAM = ubuntuopengl

PROGRAM = ubuntuopengl 给最后输出文件起别名

SRC = $(wildcard ./*.cpp)

SRC = $(wildcard ./*.cpp) 获取工作目录下的所有的.cpp文件列表

OBJECTS = $ (patsubst %.cpp,%.o,$(SRC))

$ (patsubst 原模式, 目标模式, 文件列表) 在$ (patsubst %.c,%.o,$ (SRC) )中,patsubst把$(SRC)中的变量符合后缀是.cpp的全部替换成.o

LIBS = -lX11 -lGL -lGLEW

LIBS = -lX11 -lGL -lGLEW 库文件

%.o: %.cpp
$(CC) $(LIBS) -c -o $@ $<

静态模式 生成链接文件

解释什么是静态模式:

objects = foo.o bar.o
all: $(objects)
$(objects): %.o: %.c
$(CC) -c $(CFLAGS) $< -o $@
等同于
foo.o : foo.c
$(CC) -c $(CFLAGS) foo.c -o foo.o
bar.o : bar.c
$(CC) -c $(CFLAGS) bar.c -o bar.o

试想,如果我们的%.o有几百个,那种我们只要用这种很简单的“静态模式规则”就可以写完一堆规则,实在是太有效率了

$(PROGRAM): $(OBJECTS)
$(CC) -o $@ $(OBJECTS) $(LIBS)

链接库文件生成可执行文件

clean:
-rm -f $(PROGRAM)
-rm -f $(OBJECTS)

清理可执行文件和生成的.o文件

此外常用的一些指令

CFLAGS

CFLAGS:指定头文件(.h)的路径 如:CFLAGS=-I /usr/include -I /path/include

LDFLAGS

LDFLAGS:指定库文件的路径 如:LDFLAGS=-L /usr/lib -L /path/to/your/lib

LIBS

LIBS:告诉链接器要链接哪些库文件。如LIBS = -lx11 -lGL -lGLEW, -l代表所链接的库文件


http://www.ppmy.cn/news/12041.html

相关文章

(二十)正则表达式

目录 前言: 1.概述: 2.正则表达式体验: 3.正则表达式字符 4.正则表达式在字符串方法中的使用 5.代码演示: 6.正则表达式支持爬取信息 7.代码演示: 前言: 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regex…

2023版大数据学习路线图(适合自学)

随着信息产业的迅猛发展&#xff0c;大数据应用逐渐落地&#xff0c;行业人才需求量逐年扩大。大数据成为目前最具前景的高薪行业之一&#xff0c;大数据分析工程师、大数据开发工程师等大数据人才也成为市场紧缺型人才&#xff0c;薪资一涨再涨。很多人想要加入到大数据开发行…

基于Python实现种差值方法(完整代码详细教程)

三种插值方法都是使用Python自己实现的。1.1 最近邻插值寻找每个中心点周围的八个点中有无未丢失的点&#xff0c;如果有的话就赋值为第一个找到的点&#xff0c;如果没有就扩大范围再次寻找&#xff0c;在最大范围内都找不到的话就跳过。1.2 双线性插值使用解方程的方法求解&a…

代码随想录第60天|84.柱状图中最大的矩形

84.柱状图中的最大的图形 总体思路&#xff1a;找到左右两个方向第一个小于该柱子高度的下标&#xff0c;用右下标-左下标-1得到该柱子高度对应的宽度w,再用宽度w*高度h得到面积&#xff0c;返回面积最大值 双指针法&#xff08;超时&#xff09; for循环判断左右第一个小于…

模板技术详解

目录 一、概念介绍 二、函数模板 2.1 概念 2.2 函数模板格式 2.3 函数模板原理 2.4 函数模板实例化 2.5 函数模板的匹配原则 三、类模板 3.1 类模板格式 3.2 类模板实例化 四、非类型模板参数 五、模板特化 5.1 概念 5.2 函数模板特化 5.3 类模板特化 六、模板…

好雨科技加入龙蜥 完成与 Anolis OS 兼容适配

近日&#xff0c;北京好雨科技有限公司&#xff08;以下简称“好雨科技”&#xff09;签署了 CLA&#xff08;Contributor License Agreement&#xff0c;贡献者许可协议&#xff09; &#xff0c;正式加入龙蜥社区&#xff08;OpenAnolis&#xff09;。好雨科技成立于 2015 年…

Effective C++条款38:通过复合塑模出 has-a 或“根据某物实现出“

Effective C条款38&#xff1a;通过复合塑模出 has-a 或"根据某物实现出"&#xff08;Model "has-a" or "is-implemented-in-terms-of" through composition&#xff09;条款38&#xff1a;通过复合塑模出 has-a 或"根据某物实现出"1、…

【自学Docker】Docker HelloWorld

Docker HelloWorld Docker服务 查看Docker服务状态 使用 systemctl status docker 命令查看 Docker 服务的状态。 haicoder(www.haicoder.net)# systemctl status docker我们使用 systemctl status docker 命令查看 Docker 服务的状态&#xff0c;显示结果如下图所示&#…