随笔分类 -  linux

摘要:001_Makefile的引入及规则 使用keil、mdk、avr 等工具开发程序时点点鼠标就可以编译了, 它的内部机制是什么?它怎么组织管理程序?怎么决定编译哪一个文件? gcc -o test a.c b.c //简单 a.c ==>APP 执行编译(预处理、编译、汇编)、链接 a.c ==> 阅读全文
posted @ 2018-01-31 18:57 Liu_Jing 阅读(324) 评论(0) 推荐(0)
摘要:make是以从上到下的顺序读入Makefile中的内容的。然而,处理Makefile中的语句却并非完全从上到下。 大体上,make处理一个Makefile分为两个阶段。第一个阶段包含: 1.make读入Makefile,以及Makefile中所包含的其他Makefile; 2.make分析并获得变量 阅读全文
posted @ 2018-01-24 12:02 Liu_Jing 阅读(302) 评论(0) 推荐(0)
摘要:在对应目录中放入对应的文件 执行make后报错: 这是在构建依赖文件时,gcc因为找不到foo.h而报错。那是因为foo.h和foo.c放在不同的目录中,这样需要使用gcc的 -I 选项,指定包含路径,所以,更改后的Makefile如下: 这样就完成了支持头文件目录指定。 从Makefile的角度看 阅读全文
posted @ 2018-01-21 15:49 Liu_Jing 阅读(435) 评论(0) 推荐(0)
摘要:先手工创建几个文件目录: 接下来先创建code/foo/src目录下的Makefile: 具体和complicated项目的差别可以看书或者上篇随笔。 第一个提示没有那个目录,可以在include的时候加上'-'就可以忽略这个,因为这里对我们的项目没有实质影响,但是新手对于报错或者警告总是不放心,故 阅读全文
posted @ 2018-01-16 21:21 Liu_Jing 阅读(340) 评论(0) 推荐(0)
摘要:现在我们再对complicated项目做一些更改,增加程序文件间依赖关系的复杂度。 在之前的Makefile不做更改的情况下,我们make一下: 在这次成功编译的基础上,我们再做一些改动,注意在这之前不要执行make clean,否则不能发现新问题。 从结果看,尽管foo.c和main.c都被重新编 阅读全文
posted @ 2018-01-16 21:08 Liu_Jing 阅读(813) 评论(0) 推荐(0)
摘要:Makefile中存在一个include指令,它的作用如同C语言中的#include预处理指令。在Makefile中,可以通过使用include指令将自动生成的依赖关系文件包含进来,从而使得依赖关系文件中的内容成为Makefile的一部分。 在此之前,先介绍一下Makefile中的include的用 阅读全文
posted @ 2018-01-16 19:54 Liu_Jing 阅读(2029) 评论(0) 推荐(0)
摘要:后面会介绍gcc获得源文件依赖的方法,gcc这个功能就是为make而存在的。我们采用gcc的-MM选项结合sed命令。使用sed进行替换的目的是为了在目标名前加上“objs/”前缀。gcc的-E选项,预处理。在生成依赖关系时,其实并不需要gcc编译源文件,只要预处理就可以获得依赖关系了。通过-E选项 阅读全文
posted @ 2018-01-15 21:49 Liu_Jing 阅读(666) 评论(0) 推荐(0)
摘要:在大多项目中都会合理设计目录结构来提高维护性,在编译一个项目时会产生大量中间文件,如果中间文件直接和源文件放在一起,就显得杂乱而不利于维护。在为现在这个complicated项目编写makefile之前,我们先给出目录结构需求: 1.将所有的目标文件放在objs子目录中; 2.将最终生成的可执行程序 阅读全文
posted @ 2018-01-12 13:11 Liu_Jing 阅读(917) 评论(0) 推荐(0)
摘要:通过函数能显著增强Makefile的功能。对于simple项目的Makefile,尽管使用了模式规则,但还是有一件比较麻烦的事情,就是要在Makefile中指明每一个项目源文件。下面介绍几个后期会使用到的函数,更多请参考《GUN Make》。 1.abspath函数 从命名就应该能够猜出它的作用。a 阅读全文
posted @ 2018-01-11 21:26 Liu_Jing 阅读(296) 评论(0) 推荐(0)
摘要:变量的类别有递归扩展变量和简单扩展变量。只用一个“=”符号定义的变量被称为递归扩展变量(recursively expanded variable)。通过下面例子观察递归扩展变量的特点。 从结果来看,递归扩展变量的引用是递归的。 上例所示的Makefile,CFLAGS变量最后都会被展开为“-Ifo 阅读全文
posted @ 2018-01-09 21:43 Liu_Jing 阅读(518) 评论(0) 推荐(0)
摘要:让你的makefile更专业。 在上一个Makefile所在目录下通过touch命令创建一个clean文件,然后执行make clean,将发现make总是提示clean文件是最新的,而不是按我们期望的那样对项目文件进行清楚操作。 make这样的行为,是因为它将clean当做文件来处理,在当前目录下 阅读全文
posted @ 2018-01-09 20:34 Liu_Jing 阅读(277) 评论(0) 推荐(0)
摘要:编写Makefile的第一步,不是一个猛子扎进去试着写一个规则并对之调试,而应该先采用面向依赖关系的思考方法勾勒出makefile要表达怎样的依赖关系,这一点尤为重要。通过不断地练习这种思考方法,才可能达到流畅地编写makefile的能力。 上例的一个依赖关系类图为: 表示simple可执行文件是通 阅读全文
posted @ 2018-01-08 20:47 Liu_Jing 阅读(372) 评论(0) 推荐(0)
摘要:目录 1、Makefile学习之路1————基础 2、Makefile学习之路2————规则 3、Makefile学习之路3————规则的运行 4、Makefile学习之路4————让你的Makefile更专业 5、Makefile学习之路5————变量 6、Makefile学习之路6————通过函 阅读全文
posted @ 2018-01-08 19:50 Liu_Jing
摘要:find 目的:查找符合条件的文件 1)在那些目录中查找 2)查找的内容 格式: find 目录名 选项 查找条件 举例: 1)find / work / 001_linux_ basic / dira / -name "test1.txt" 说明: a)/ work / 001_linux_bas 阅读全文
posted @ 2017-12-28 20:33 Liu_Jing 阅读(265) 评论(0) 推荐(0)
摘要:文件的操作: touch:新建文件 touch 文件名 举例: touch file1 在当前目录新建名为file1的文件 注意: 1)同一目录无法创建同名的文件 2)linux的文件名是区分大小写的,如file1和File1是不同文件。 这一点跟windows不同。 mv(move的缩写):修改文 阅读全文
posted @ 2017-12-26 16:46 Liu_Jing 阅读(310) 评论(0) 推荐(0)
摘要:回顾一下常用命令: pwd : 显示当前所在的目录 ls : 显示当前目录下的文件 cd : 切换路径 cd . . : 返回到上一级路径 mkdir : 新建目录 rmdir : 删除目录 touch : 新建文件 cp :复制文件 rm :删除文件 cat : 将文件内容显示到终端 clear 阅读全文
posted @ 2017-12-25 20:57 Liu_Jing 阅读(1553) 评论(0) 推荐(0)
摘要:正如我们之前所讨论到的,shell 在 shell 会话中维护着大量的信息,这些信息称为 (shell)环境。存储在 shell 环境中的数据被程序用来确定配置属性。然而大多数程序用配置文件来存储程序设置,某些程序也会查找存储在 shell 环境中的数值来调整他们的行为。知道了这些,我们就可以用 s 阅读全文
posted @ 2017-11-16 22:05 Liu_Jing 阅读(509) 评论(0) 推荐(0)
摘要:通常,现在的操作系统都支持多任务,意味着操作系统(给用户)造成了一种假象,(让用户觉得) 它同时能够做多件事情,事实上,它是快速地轮换执行这些任务的。Linux 内核通过使用进程,来管理多任务。通过进程,Linux 安排不同的程序等待使用 CPU。有时候,计算机变得呆滞,运行缓慢,或者一个应用程序停 阅读全文
posted @ 2017-11-13 21:35 Liu_Jing 阅读(144) 评论(0) 推荐(0)
摘要:Unix 传统中的操作系统不同于那些 MS-DOS 传统中的系统,区别在于它们不仅是多任务系统,而且也是多用户系统。这到底意味着什么?它意味着多个用户可以在同一时间使用同一台计算机。然而一个典型的计算机可能只有一个键盘和一个监视器,但是它仍然可以被多个用户使用。例如,如果一台计算机连接到一个网络或者 阅读全文
posted @ 2017-11-13 17:16 Liu_Jing 阅读(213) 评论(0) 推荐(0)
摘要:开玩笑地说,我经常把 Unix 描述为“这个操作系统是为喜欢敲键盘的人们服务的。”当然,Unix 甚至还有一个命令行,这个事实是个确凿的证据,证明了我所说的话。但是命令行用户不喜欢敲入那么多字。那又为什么如此多的命令会有这样简短的命令名,像 cp,ls,mv,和 rm?事实上,命令行最为珍视的目标之 阅读全文
posted @ 2017-11-09 15:48 Liu_Jing 阅读(242) 评论(0) 推荐(0)