C语言 makefile学习及实现实例
C语言 makefile学习及实现实例
俗话说,不会写makefile的程序员不是好的程序员。
看了很多人写的makefile教程,感觉太难懂,还不如韦东山老师视频里讲的好理解。
先记下这几个符号,以后看到就不会忘记这是什么东西了。
先来看一个例子:
<span style="font-size:18px;">Person: main.o person.o g++ -o $@ $^ %.o : %.cpp g++ -c -o $@ $< clean: rm -rf *.o Person</span>
其中:
1、Person表示要生成的目标文件。
main.o person.o是依赖文件
所以Person: main.o person.o
这句话的意思就是,要想生成Person这个文件,就要依赖于main.o , person.o这两个文件。
2、$@ : 表示目标文件,这里的目标文件就是Person
$^ : 表示目标文件后面的所有依赖文件,也就是.o文件
$< : 表示第一个依赖文件,这里的第一个指的就是main.o
3、%.o : %.cpp
%,o : %,cpp前面加%表示通配符,表示通配所有的.o文件还有所有的.cpp文件
4、还有一点要注意,上面g++前面不是空格,而是一个tab,一般情况下,tab是4个空格的大小。
5、clean:
对应下面的文件,如果你执行make clean,makefile就会帮你清除所有的.o和Person这个目标文件。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
C语言 makefile学习及实现实例
C语言 makefile学习及实现实例 俗话说,不会写makefile的程序员不是好的程序员. 看了很多人写的makefile教程,感觉太难懂,还不如韦东山老师视频里讲的好理解. 先记下这几个符号,以后看到就不会忘记这是什么东西了. 先来看一个例子: <span style="font-size:18px;">Person: main.o person.o g++ -o $@ $^ %.o : %.cpp g++ -c -o $@ $< clean: rm -rf *
-
C语言树状数组的实例详解
C语言树状数组的实例详解 最近学了树状数组,给我的感觉就是 这个数据结构好神奇啊^_^ 首先她的常数比线段树小,其次她的实现复杂度也远低于线段树 (并没有黑线段树的意思=-=) 所以熟练掌握她是非常有必要的.. 关于树状数组的基础知识与原理网上一搜一大堆,我就不赘述了,就谈一些树状数组的应用好了 1,单点修改,求区间和 #define lowbit(x) (x&-x) // 设 x 的末尾零的个数为 y , 则 lowbit(x) == 2^y void Update(int i,int v)
-
Python基础学习之类与实例基本用法与注意事项详解
本文实例讲述了Python基础学习之类与实例基本用法与注意事项.分享给大家供大家参考,具体如下: 前言 和其他编程语言相比,Python用非常少的新语法和语义将类加入到语言中.Python的类提供了面向对象编程的所有标准特性:类继承机制允许多个基类,派生类可以覆盖它基类的任何方法,一个方法可以调用基类中相同名称的的方法.对象可以包含任意数量和类型的数据.和模块一样,类也拥有Python天然的动态特性:它们在运行时创建,可以在创建后修改. Python的类 Python类实例时,先调用__new_
-
R语言对CSV文件操作实例讲解
在 R 语言中,我们可以从存储在 R 语言环境外的文件中读取数据. 我们还可以将数据写入将被操作系统存储和访问的文件. R 语言可以读取和写入各种文件格式,如csv,excel,xml等. 在本章中,我们将学习从csv文件读取数据,然后将数据写入csv文件. 该文件应该存在于当前工作目录中,以便 R 语言可以读取它. 当然我们也可以设置我们自己的目录并从那里读取文件. 获取和设置工作目录 您可以使用getwd()函数检查R语言工作区指向的目录. 您还可以使用setwd(
-
C语言题解Leetcode56合并区间实例
目录 解题思路 解题遇到的问题 后续需要总结学习的知识点 解题思路 题目链接 56. 合并区间 本质在于两两做对比,如果两个区间,可以合并,则为结果二维数组中的一员,如果不可合并,则放入结果二维数组,所以根本在于,如何判断两个区间,是可合并,还是不可合并 1.首先将二维数组,按照左端元素进行排序 2.将第一个元素放入结果区间列表 3.如果当前区间的左端元素比结果区间列表最后一个区间右端元素小,则存在包含关系,此时只需更新右端元素即可 (更新为当前区间的右端元素与结果区间的右端元素的最大值) 4.
-
使用C语言判断栈的方向实例
这一问题主要是如何判读出先后入栈的变量的地址大小,比如有a, b两个变量一先一后被定义,如果a的地址大于b的地址,则说明是以低地址方向增长的,反之,往高地址方向增长.在写C程序的时候不能简单直接的定义两个变量来比较它们的地址大小,因为这样很有可能编译器会做优化,最终导致结果不真实.为避免这种编译器优化的情况,可以采用将变量定义到函数中,然后递归调用该函数. 例如下面的代码: #include <stdio.h> static int stack_direction = 0; static vo
-
Kotlin 语言中调用 JavaScript 方法实例详解
Kotlin 语言中调用 JavaScript 方法实例详解 Kotlin 已被设计为能够与 Java 平台轻松互操作.它将 Java 类视为 Kotlin 类,并且 Java 也将 Kotlin 类视为 Java 类.但是,JavaScript 是一种动态类型语言,这意味着它不会在编译期检查类型.你可以通过动态类型在 Kotlin 中自由地与 JavaScript 交流,但是如果你想要 Kotlin 类型系统的全部威力 ,你可以为 JavaScript 库创建 Kotlin 头文件. 内联 J
-
用C语言模仿Python函数的实例
首先得说明一点,C 语言不是函数式编程语言,要想进行完全的函数式编程,还得先写个虚拟机,然后再写个解释器才行(相当于 CPython ). 下面我们提供一个例子,说明 C 语言函数可以"适度地模仿" Python 函数. 我们有如下的 Python 程序: def line_conf(a, b): def line(x): return a*x + b return line line1 = line_conf(1, 1) line2 = line_conf(4, 5) print(l
-
C语言中联合体union的实例详解
C语言中联合体union的实例详解 1.定义: union(int i, short s, char c) un; un.i = 3; printf("i=%d",un.i); printf("length = %d\n",sizeof(un);//==4,有最大的变量来决定 2.相当与java里的List T类型 3.数据交换 void swap(int *p , int *q){ int temp = *p; *p = *q; *q = temp; } 4.打
-
C语言中二级指针的实例详解
C语言中二级指针的实例详解 用图说明 示例代码: #include <stdio.h> int main(int argc, const char * argv[]) { // int a = 5; int *p1 = &a; //-打印地址-----地址相同--------------- printf("&a = %p\n", &a);// printf("p1 = %p\n", p1);// int **p2 = &p
随机推荐
- Hibernate 的原理与配置
- jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
- vue resource post请求时遇到的坑
- 彻底学会Angular.js中的transclusion
- 详解React 16 中的异常处理
- weUI应用之JS常用信息提示弹层的封装
- MYSQL环境变量设置方法
- 详解PHP中的序列化、反序列化操作
- Android移动端touch实现下拉刷新功能
- PHP无法访问远程mysql的问题分析及解决
- MySQL的一些常用的SQL语句整理
- shell监控脚本 准备工作分享
- JavaScript中 ES6 generator数据类型详解
- 从汇编看c++中多态的应用
- 举例讲解JavaScript中关于对象操作的相关知识
- JavaScript中的函数模式详解
- Android中从图库中选取图片实例详解
- Android 开发之Dialog,Toast,Snackbar提醒
- Android 自定义view实现TopBar效果
- Android 自定义view实现进度条加载效果实例代码