Linux开发工具的使用(二)(2)

简介: Linux开发工具的使用(二)1.Linux编译器gcc/g++使用gcc是c语言的编译器,g++是c++的编译器1.1 背景程序的翻译分为四个阶段:预处理、编译、汇编、链接,那么这些都是具体做了什么?

2.Linux项目自动化构建工具-make/Makefile

2.1 概念

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编

译,极大的提高了软件开发的效率。

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命

令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一

种在工程方面的编译方法。

make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

2.2 初次见面

2.3 依赖关系和依赖方法

什么是依赖关系?举个生活中例子:我们都有自己的家庭,家庭成员有爸爸和妈妈,那么我是他们的儿子,作为儿子,我们在上学期间,我们的学费、生活费什么的费用都靠的是爸爸来出,我们依赖于自己的爸爸,这就是依赖关系。什么是依赖方法呢?同样,我们在上高中的时候,每个月可能是回到家里找爸爸要钱或者是不回去打电话给爸爸要钱,那么我们不管是怎么样要钱,在爸爸面前要钱的时候都会说:爸,下个月没有生活费给我点生活费。其中这句话中,爸这个字就是依赖关系,然后后面的话就是依赖方法,==只有依赖关系和依赖方法同时存在才能完成程序。==假如我向同学的爸说这句话那就不能完成这个要到生活费这个事情。假如我对我爸只是说了声爸,后半句没有说,那么也是不能完成这件事情的。


同样的在上面图中Makefile文件中写的程序中的myfile:myfile.c这段代码中,myfile就依赖于myfile.c,这段代码下面的gcc -o myfile myfile.c就是依赖关系对应的依赖方法。==明白了依赖关系那么Makefile文件也就是一个围绕依赖关系和依赖方法的一个自动化编译的工具。==下面根据预处理、编译、汇编、链接四个阶段来理解依赖:

2.4 make原理

make是如何工作的,在默认的方式下,也就是我们只输入make命令。


make会在当前目录下找名字叫“Makefile”或“makefile”的文件。

如果找到,它会找文件中的第一个目标文件(target),在上图中,他会找到“myfile”这个文件,并把这个文件作为最终的目标文件。

make解释Makefile文件的底层算法就是用的栈结构

2.5 项目清理

依赖关系中,目标文件对应的依赖文件列表可以是空,验证:



make指令执行的时候默认是从上到下扫描时,默认只会执行第一组目标文件的依赖关系和依赖方法,什么意思?看实例:



.PHONY:总是被执行的。什么意思呢?看下面现象:

上述图中的现象是make多次后提示说myfile以最新的了。那么当我们带上.PHONY呢?

这就是.PHONY这个语法的现象观察后的作用,也就是对目标文件的依赖关系对应的依赖方法总是执行


**上面没做.PHONY处理的,使用make指令后,make提示此文件是最新的了,那么make是怎么知道是最新的呢?**验证:(stat指令是查看文件状态)


其实,make指令检查的是源文件和目标文件的时间,如果源文件时间在目标文件时间前(也就是源文件要旧一些),再次make就会提示此文件是最新的;如果源文件时间在目标文件时间后(也就是源文件要新一些),再次make就会执行相对应的指令。如下:(touch既可以创建文件,也可以更新文件时间)

[yinhan@VM-12-12-centos _stu]$ ll
total 20
-rw-rw-r-- 1 yinhan yinhan   75 Jan  7 20:44 Makefile
-rwxrwxr-x 1 yinhan yinhan 8360 Jan  7 20:44 myfile
-rw-rw-r-- 1 yinhan yinhan   74 Jan  7 20:38 myfile.c
[yinhan@VM-12-12-centos _stu]$ make
make: `myfile' is up to date.
[yinhan@VM-12-12-centos _stu]$ make
make: `myfile' is up to date.
[yinhan@VM-12-12-centos _stu]$ stat myfile
  File: ‘myfile’
  Size: 8360        Blocks: 24         IO Block: 4096   regular file
Device: fd01h/64769d  Inode: 790070      Links: 1
Access: (0775/-rwxrwxr-x)  Uid: ( 1001/  yinhan)   Gid: ( 1001/  yinhan)
Access: 2023-01-07 20:44:35.505555881 +0800
Modify: 2023-01-07 20:44:35.182552590 +0800
Change: 2023-01-07 20:44:35.182552590 +0800
 Birth: -
[yinhan@VM-12-12-centos _stu]$ stat myfile.c
  File: ‘myfile.c’
  Size: 74          Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d  Inode: 790069      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/  yinhan)   Gid: ( 1001/  yinhan)
Access: 2023-01-07 20:38:54.831086646 +0800
Modify: 2023-01-07 20:38:54.828086616 +0800
Change: 2023-01-07 20:38:54.828086616 +0800
 Birth: -
[yinhan@VM-12-12-centos _stu]$ touch myfile.c
[yinhan@VM-12-12-centos _stu]$ stat 
stat: missing operand
Try 'stat --help' for more information.
[yinhan@VM-12-12-centos _stu]$ stat myfile.c
  File: ‘myfile.c’
  Size: 74          Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d  Inode: 790069      Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1001/  yinhan)   Gid: ( 1001/  yinhan)
Access: 2023-01-07 20:53:17.489869168 +0800
Modify: 2023-01-07 20:53:17.415868416 +0800
Change: 2023-01-07 20:53:17.415868416 +0800
 Birth: -
[yinhan@VM-12-12-centos _stu]$ make
gcc -o myfile myfile.c
[yinhan@VM-12-12-centos _stu]$ 

3.sudo配置

首先先看一下没有配置的情况:

[yinhan@VM-12-12-centos _stu]$ sudo ls
[sudo] password for yinhan: 
yinhan is not in the sudoers file.  This incident will be reported.
[yinhan@VM-12-12-centos _stu]$ 

3.1 理解sudo

sudo指令使用的时候为什么要输入自己的密码呢?sudo的功能的是以系统管理者的身份执行指令,也就是说,经由 sudo 所执行的指令就好像是 root 亲自执行。既然是这样的功能,为什么不是输入root的密码呢?那么我们sudo一下就是以root身份执行指令,那么这里root不就是没有意义嘛,那为什么需要sudo呢?

首先没有配置sudo,那么sudo+命令是不能执行的,为什么?因为该用户不在信任列表中。这里就可以理解为什么sudo使用时输入自己的密码,原因就在于该用户是值得信任的用户才能使用,不是信任用户是不可使用的,会提示。

3.2 sudo配置

进入到sudoers文件中对其进行更改就OK了。

sudoers文件在哪里?

[yinhan@VM-12-12-centos _stu]$ ls -al /etc/sudoers
-r--r----- 1 root root 4363 Nov  2 10:32 /etc/sudoers //拥有者和所属组都是root
[yinhan@VM-12-12-centos _stu]$ 

怎么配置?

1.使用su命令切换成root用户

2.进入/etc/sudoers并编辑,使用vim /etc/sudoers

3.一直翻到最低层,看到这样的(如图示)

4.退出底行模式下使用wq!指令(因为是系统级配置文件所以修改需要慎重,所以必须强制修改即可)














目录
打赏
0
0
0
0
0
分享
相关文章
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
【Linux】Linux 开发工具(vim、gcc/g++、make/Makefile)+【小程序:进度条】-- 详解
Linux基础——Linux开发工具(下)_make/makefile
Linux基础——Linux开发工具(下)_make/makefile
67 1
【linux】在linux操作系统下快速熟悉开发环境并上手开发工具——体验不一样的开发之旅
【linux】在linux操作系统下快速熟悉开发环境并上手开发工具——体验不一样的开发之旅
【Linux】Linux环境基础开发工具_6
【Linux】Linux环境基础开发工具_6
60 0
【Linux】Linux环境基础开发工具_5
【Linux】Linux环境基础开发工具_5
45 0
【Linux】Linux环境基础开发工具_4
【Linux】Linux环境基础开发工具_4
58 0
【Linux】Linux环境基础开发工具_3
【Linux】Linux环境基础开发工具_3
36 0
【Linux】Linux环境基础开发工具_2
【Linux】Linux环境基础开发工具_2
33 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等