linux里面的make和makefile是做啥的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux里面的make和makefile是做啥的?相关的知识,希望对你有一定的参考价值。

linux里面的make和makefile是做什么的?

1、make:是一个非常重要的编译命令,本质上它是一个程序。利用make工具,可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。

2、Makefile文件 :Make工具最主要也是最基本的功能就是通过makefile文件来描述源程序之间的相互关系并自动维护编译工作,本质上makefile文件是个文本文件,用于配置编译过程。makefile 文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。makefile 文件是许多编译器--包括 Windows NT 下的编译器--维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改 makefile 文件而已。

3、在 UNIX 系统中,习惯使用 Makefile 作为 makfile 文件。如果要使用其他文件作为 makefile,则可利用类似下面的 make 命令选项指定 makefile 文件:

  $ make -f Makefile.debug

  例如,一个名为prog的程序由三个C源文件filea.c、fileb.c和filec.c以及库文件LS编译生成,这三个文件还分别包含自己的头文件a.h 、b.h和c.h。通常情况下,C编译器将会输出三个目标文件filea.o、fileb.o和filec.o。假设filea.c和fileb.c都要声明用到一个名为defs的文件,但filec.c不用。即在filea.c和fileb.c里都有这样的声明:
  #include "defs"
  那么下面的文档就描述了这些文件之间的相互联系:
   #It is a example for describing makefile
   prog : filea.o fileb.o filec.o
   cc filea.o fileb.o filec.o -LS -o prog
   filea.o : filea.c a.h defs
   cc -c filea.c
   fileb.o : fileb.c b.h defs
   cc -c fileb.c
   filec.o : filec.c c.h
   cc -c filec.c
  这个描述文档就是一个简单的makefile文件。
参考技术A make是进行代码编译的工具,它会自动读取makefile文件,然后调用编译工具来进行软件的编译和安装工作。makefile是编译的依据或者说编译的命令代码了。 参考技术B 这是两个命令。用于编译文件。就是从网上下载程序源代码,在本机亲编译成程序使用。这样做的好处是代码可以自己修改,生成适合自己喜好的程序,还有一点是在下载过程中省网络资源。 参考技术C makefile提供一组脚本,make程序解释makefile ,按照makefile的规则来编译,安装源代码 参考技术D Windows 下面有IDE, Linux呢? Linux vim+make+gcc 哈哈

sizeof 是做啥的?

【中文标题】sizeof 是做啥的?【英文标题】:What does sizeof do?sizeof 是做什么的? 【发布时间】:2010-07-08 11:46:03 【问题描述】:

sizeof的主要功能是什么(我是C++新手)。比如

int k=7;
char t='Z';

sizeof (k)sizeof (int)sizeof (char) 是什么意思?

【问题讨论】:

您的字符中缺少一个 '。 @Tyler McHenry Timing 在 0.08 秒时对我来说有点离谱。 @davit:如果你要学习一门编程语言,你真的应该尝试阅读一本体面的关于该语言的入门书籍以了解基础知识,而不仅仅是让其反复试验、错误、猜测和无休止关于 SO 的问题。 当我用谷歌搜索一个问题时,它总是让我很开心,而且第一个链接是这样的,有人因为提问而不是谷歌搜索而受到谴责! :) 我投票结束这个问题作为离题,因为这个问题根本没有显示任何努力。 【参考方案1】:

sizeof(x) 返回变量或类型x 占用的内存量(以字节为单位)。它与变量的值无关。

例如,如果您有一个任意类型的数组T,那么该数组元素之间的距离正好是sizeof(T)

int a[10];
assert(&(a[0]) + sizeof(int) == &(a[1]));

在变量上使用时,相当于在该变量的类型上使用:

T x;
assert(sizeof(T) == sizeof(x));

根据经验,最好尽可能使用变量名,以防类型发生变化:

int x;
std::cout << "x uses " << sizeof(x) << " bytes." << std::endl
// If x is changed to a char, then the statement doesn't need to be changed.
// If we used sizeof(int) instead, we would need to change 2 lines of code
// instead of one.

当用于用户定义的类型时,sizeof 仍然返回该类型的实例使用的内存量,但值得指出的是,这不一定等于其成员的总和。

struct Foo  int a; char b; ;

虽然sizeof(int) + sizeof(char) 通常是5,但在许多机器上,sizeof(Foo) 可能是8,因为编译器需要pad out 结构使其位于4 字节边界上。情况并非总是如此,很有可能在您的机器上sizeof(Foo) 将是 5,但您不能依赖它。

【讨论】:

int 表示如果变量 t 给定 t=100 而不是 sizeof(t)= 1? sizeof 与变量的无关。它与类型有关。它告诉您,在您的系统上,int 类型的所有变量都需要 4 个字节的存储空间。 它显示 4 因为int 通常使用 4 个字节。 sizeof与变量中存储的值无关。 nit:从技术上讲,sizeof 不报告以字节为单位的大小,而是以任何必要的单位来报告 sizeof(char) == 1。这几乎是普遍的字节,但至少在理论上,不一定。 来自标准:“sizeof 运算符在其操作数的对象表示中产生字节数。”但是,您是对的,标准中的字节没有像通常那样明确定义为 8 位。【参考方案2】:

补充彼得亚历山大的答案: sizeof 产生一个值或类型的大小,是 char---char 的大小的倍数,被定义为可寻址的最小内存单元(通过 C 或 C++)对于给定的架构(并且,至少在 C++ 中,根据标准,大小至少为 8 位)。这就是通常所说的“字节”(给定架构的最小可寻址单元)的含义,但澄清一下也无妨,而且偶尔会有关于sizeof (char) 可变性的问题,当然总是1

【讨论】:

字节不一定是“给定架构的最小可寻址单元”。在某些 CDC Cyber​​ 计算机上,最小的可寻址单元是 16 位字(地址 0 是 16 位,地址 1 是不同的 16 位),它们将两半称为字节。 @James:对:我的意思是“字节”是一个固有的模棱两可的术语,无论你如何定义它,某个地方的人都会以不同的方式使用它。对 CDC 很感兴趣。 大多数人会同意一个字节是 8 位,虽然过去有些混乱,但现在它已标准化:IEC 80000-13。相比之下,机器中最小的可寻址单元通常称为字,它与机器相关。有 16 位、32 位、64 位架构,但即使在这些情况下,一个字节仍然是 8 位。【参考方案3】:

sizeof() 返回传递给它的参数的大小。 sizeof() cpp reference

【讨论】:

sizeof() 操作的效率如何?如果我在数百个地方调用sizeof(),会不会很慢,我应该将它存储在变量中吗? int LONG_SIZE = sizeof(long); 之类的东西? sizeof() 是编译时间,因此它是您可以获得的最佳性能,因为在运行时这只是代码中的一个常数。【参考方案4】:

sizeof 是一个编译时一元运算符,它返回数据类型的大小。 例如:

sizeof(int)

将以字节为单位返回int 的大小。

还要记住,类型大小取决于平台。

查看此页面了解更多详情:sizeof in C/C++

【讨论】:

以上是关于linux里面的make和makefile是做啥的?的主要内容,如果未能解决你的问题,请参考以下文章

NetBeans是Java里面是做啥的?

mfc中的settimer函数是做啥的里面的参数呢

SQL语句里面的"Cast"是做啥的?是不是是保留字?

VUE在前端里面主要是做啥的呢 ?

SQL语句里面的"Cast"是做啥的?是不是是保留字?

IT运维中的linux运维具体每天工作是做啥的?