怎么做自己的网站主页/google chrome浏览器

怎么做自己的网站主页,google chrome浏览器,为什么四川省建设厅网站打不开,哪个网站可以做任务对于makefile,掌握一个规则,两个变量和三个函数。下面介绍一个规则。 makefile的作用:一个项目代码的管理工具。当一个项目的代码文件数(如.c文件)太多,用gcc编译会太麻烦,如果全部文件一次性编…

对于makefile,掌握一个规则,两个变量和三个函数。下面介绍一个规则。

makefile的作用:一个项目代码的管理工具。当一个项目的代码文件数(如.c文件)太多,用gcc编译会太麻烦,如果全部文件一次性编译,一个文件有错误,所有文件都需要重新编译。如果每个文件单独编译,则十分麻烦。因此,就有项目代码管理工具makefile。项目代码编译管理;节省编译项目的时间;一次编写,终身受益。

[root@localhost src]# ls
add.c  div.c  libM1.so  main.c  mul.c  sub.c
[root@localhost src]# gcc -pedantic -Wall -pipe -ggdb3 *.c -o zsx -I ../include/
[root@localhost src]# ls
add.c  div.c  libM1.so  main.c  mul.c  sub.c  zsx  //可以看出最终只是生成了zsx目标文件,因此有一个.c文件改变了,就会全部重新编译,然后链接。
[root@localhost src]# ./zsx 
sum = 26
 

规则如下:

规则中的三要素:目标,依赖,命令

目标:依赖条件

       命令  //tab缩进,必须要缩进

[root@localhost src]# ls
add.c  div.c  libM1.so  main.c  mul.c  sub.c
[root@localhost src]# vim makefile
zsx:main.c sub.c add.c mul.c div.c
        gcc -pipe -pedantic -Wall -ggdb3 main.c sub.c add.c mul.c div.c -o zsx -I ../include //第二行必须有一个tab缩进

[root@localhost src]# make
gcc -pipe -pedantic -Wall -ggdb3 main.c sub.c add.c mul.c div.c -o zsx -I ../include
[root@localhost src]# ls
add.c  div.c  libM1.so  main.c  makefile  mul.c  sub.c  zsx
[root@localhost src]# ./zsx
sum = 26
//上述中,生成的最终文件zsx自动会跟makefile文件在同一个目录。注意两点:1.对于依赖条件中的几个文件如果不跟makefile在同一个目录的话,必须指定其所在目录(如../main.c、/mnt/hgfs/shared/ggc/Calc/add.c等),这样makefile才能找到依赖条件所需的文件在哪里;2.在命令中,要分析清楚该命令是否需要指出头文件、库文件(-I  -L  -static  -l)。

举例:

[root@localhost src]# ls
add.c  div.c  libM1.so  main.c  makefile  mul.c  sub.c
[root@localhost src]# vim makefile
zsx:main.o add.o sub.o mul.o div.o
        gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx
main.o:main.c
        gcc -pedantic -Wall -pipe -c main.c -o main.o -I ../include
add.o:add.c
        gcc -pedantic -Wall -pipe -c add.c -o add.o
sub.o:sub.c
        gcc -pedantic -Wall -pipe -c sub.c -o sub.o 
mul.o:mul.c
        gcc -pedantic -Wall -pipe -c mul.c -o mul.o 
div.o:div.c
        gcc -pedantic -Wall -pipe -c div.c -o div.o

[root@localhost src]# make
gcc -pedantic -Wall -pipe -c main.c -o main.o -I ../include  //生成main.o
gcc -pedantic -Wall -pipe -c add.c -o add.o //生成add.o
gcc -pedantic -Wall -pipe -c sub.c -o sub.o //生成sub.o
gcc -pedantic -Wall -pipe -c mul.c -o mul.o //生成mul.o
gcc -pedantic -Wall -pipe -c div.c -o div.o //生成div.o
gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx  //生成最终目标  且最后链接时加上调试信息 -ggdb3
[root@localhost src]# ./zsx
sum = 26
[root@localhost src]# ls
add.c  add.o  div.c  div.o  libM1.so  main.c  main.o  makefile  mul.c  mul.o  sub.c  sub.o  zsx  //可以看出,既生成了以及中间文件.o,还生成了最终目标文件zsx。因为几个中间文件.o在makefile中也是目标文件,为次级目标文件。
[root@localhost src]# make
make: `zsx' is up to date.  //可以发现再次make没有反应,这是因为make检测到所有的文件都是最新的(即没有改动过),因此不需要再次做重复的工作。
[root@localhost src]# rm -f zsx
[root@localhost src]# make
gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx  //此时make有了反应,因为make检测到zsx目标文件删除了,因此只需要执行最后一步链接操作即可。
[root@localhost src]# ./zsx
sum = 26

[root@localhost src]# vim add.c   //修改了add.c的内容

[root@localhost src]# make

gcc -pedantic -Wall -pipe -c add.c -o add.o   //只是重新编译了add.c,编译很费时间

gcc -ggdb3 main.o add.o sub.o mul.o div.o -o zsx    //更新最终目标, 链接不费时间

//最终目标一定要写在第一行,如果未写在第一行,则需要:all:zsx  --> all指定生成的最终目标为zsx

总结:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

makefile的两个变量(自动变量和普通变量)

(1)普通变量 如: objmain.o add.o sub.o mul.o div.o //将后面的值赋值给obj,obj就是一个普通变量 targetzsx //将zsx赋值给target makefile中已经定义的一些普通变量(通常格式都是大写,类似环境变量,它们都是普通…

【C++ Priemr | 15】虚函数表剖析(二)

一、多重继承&#xff08;无虚函数覆盖&#xff09; 下面&#xff0c;再让我们来看看多重继承中的情况&#xff0c;假设有下面这样一个类的继承关系。注意&#xff1a;子类并没有覆盖父类的函数。 测试代码&#xff1a; class Base1 { public: virtual void f() { cout <…

makefile中的两个函数(wildcard和patsubst)

(1) wildcard函数 作用是查找指定目录下指定类型的文件&#xff0c;并最终返回一个环境变量&#xff0c;需要用$取值赋值给另一个环境变量&#xff01;该函数只有一个参数&#xff0c;如取出当前目录下的所有.c文件&#xff0c;并赋值给allc普通变量&#xff1a; allc$(wildc…

C库函数

Linux的系统I/O函数&#xff08;read、write、open、close和 lseek等&#xff09;与C语言的C库函数&#xff08;libc.so库文件中&#xff09;都是相对应的&#xff0c;它们都是动态库函数。如下图所示&#xff0c;C库函数有fopen、fclose、fwrite、fread和fseek等。这些C库函数…

C库函数与Linux系统函数之间的关系

由上小节知道&#xff0c;C库函数是借助FILE类型的结构体来对文件进行操作的&#xff0c;其本身只是在用户空间&#xff08;I/O缓冲区&#xff09;进行读写操作&#xff0c;而数据在内核与用户空间之间的传递、以及将内核与I/O设备之间的数据传递都是该C库函数进行一系列的系统…

open函数和errno全局变量

&#xff08;1&#xff09;open函数 man man 查看man文档的首页 其中DESCRIPTION部分描述了man文档的每一章的章节内容 第2章System calls为系统调用&#xff0c;即Liunx系统函数。 man 2 open 查看第二章的open函数的详细帮助文件。 open函数用于打开一个已经的文件或者创…

open函数和close函数的使用

学习几个常用的Linux系统I/O函数&#xff1a;open、close、write、read和lseek。注意&#xff0c;系统调用函数必须都考虑返回值。 &#xff08;1&#xff09;open函数的使用 首先&#xff0c;需要包含三个头文件&#xff1a;<sys/types.h> <sys/stat.h> <…

1091. Acute Stroke (30)

One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the results of image analysis in which the core regions are identified in each MRI slice, your job is to calculate the volume of the stroke core. Input Speci…

stat函数(stat、fstat、lstat)

#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> //需包含头文件 有如下三个函数的函数原型&#xff1a; int stat(const char *path, struct stat *buf); 第一个形参&#xff1a;指出文件&#xff08;文件路径&#xff09;&…

【Leetcode | 235】 235. 二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以是它自己…

CPU和MMU(内存管理单元)

CPU的架构&#xff1a;要求能够理解从源程序到微指令的整个经历过程&#xff1a;存储器的层次结构&#xff08;网络资源下载到硬盘、磁盘缓存、内存、Cache、寄存器&#xff09;&#xff1b;CPU的四大部分&#xff1a;ALU、CU、中断系统和寄存器&#xff1b;程序执行的整个过程…

【C++ Primer | 09】容器适配器

一、stack s.push(): 向栈内压入一个成员&#xff1b; s.pop(): 从栈顶弹出一个成员&#xff1b; s.empty(): 如果栈为空返回true&#xff0c;否则返回false&#xff1b; s.top(): 返回栈顶&#xff0c;但不删除成员&#xff1b; s.size(): 返回栈内元素…

进程控制块PCB(进程描述符)

&#xff08;1&#xff09;PCB 每个进程在内核中都有一个进程控制块&#xff08;PCB&#xff09;来维护进程相关的信息&#xff0c;Linux内核的进程控制块是task_struct结构体。grep -r “task_struct” / 可以查找根目录下&#xff0c;包含task_struct的文件文件。或者 find…

【C++ Primer | 19】控制内存分配

1. 测试代码&#xff1a; #include <iostream> #include <new> #include <cstring> #include <cstdlib> using namespace std;void* operator new(size_t size) {cout << "global Override operator new" << endl;if (void* p…

【第15章】虚函数

一、为什么基类中的析构函数要声明为虚析构函数&#xff1f; 直接的讲&#xff0c;C中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说&#xff0c;如果派生类中申请了内存空间&#xff0c;并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数&am…

【C++ Primer | 08】IO库

一、istringstream类 描述&#xff1a;从流中提取数据&#xff0c;支持 >> 操作 这里字符串可以包括多个单词&#xff0c;单词之间使用空格分开 #include <iostream> #include <sstream> using namespace std; int main() {istringstream istr(&quo…

EXEC函数族的一般规律

事实上&#xff0c;只有execve是真正的系统调用&#xff0c;其它五个函数最终都调用execve&#xff0c;所以execve在man手册第2节&#xff0c;其它函数在man手册第3节。这些函数之间的关系如下图所示。

进程间通信的方法

Linux环境下&#xff0c;进程地址空间相互独立&#xff0c;每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到&#xff0c;所以进程和进程之间不能相互访问&#xff0c;要交换数据必须通过内核&#xff0c;在内核中开辟一块缓冲区&#xff0c;进…

pipe函数

#include <unistd.h> int pipe(int pipefd[2]); 作用&#xff1a;创建管道 成功&#xff1a;0&#xff1b;失败&#xff1a;-1&#xff0c;设置errno 函数调用成功返回r/w两个文件描述符。无需open&#xff0c;但需手动close。规定&#xff1a;fd[0] …

mmap内存映射、system V共享内存和Posix共享内存

linux内核支持多种共享内存方式&#xff0c;如mmap内存映射&#xff0c;Posix共享内存&#xff0c;以system V共享内存。当内核空间和用户空间存在大量数据交互时&#xff0c;共享内存映射就成了这种情况下的不二选择。它能够最大限度的降低内核空间和用户空间之间的数据拷贝&a…