当前位置: 首页 > 编程笔记 >

关于Linux下对于makefile的理解

乐正心思
2023-03-14
本文向大家介绍关于Linux下对于makefile的理解,包括了关于Linux下对于makefile的理解的使用技巧和注意事项,需要的朋友参考一下

什么是makefile呢?在Linux下makefile我们可以把理解为工程的编译规则。一个工程中源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,那些文件需要先编译,那些文件需要后编译,那些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个shell脚本一样,其中也可执行操作系统的命令。

makefile带来的好处就是---“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大地提高了软件开发的效率。

make命令在执行时,需要一个makefile文件,以告诉make命令要怎样去编译链接程序。只要我们makefile写的足够好,make命令会自动智能的根据当前文件自己编译所需要的文件和链接目标文件。

makefile的规则:

target:prerequisites

  command

.......................

target是目标文件,prerequisites就是要生成target所需要的文件或是目标。command就是make需要执行的命令。这是一个文件依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。如果prerequisites中如果有一个以上的文件比target文件内容要新的话,command所定义的文件就会被执行。这就是makefile最核心的内容。

举个栗子:

先准备三个文件:file1.c,file2.c,file2.h

file1.c:

#include<iostream>

int main()

{

file2printf();

return 0;

}

file2.h:

#ifndef FILE2_H_

#define FILE2_H_

void file2printf();

#endif

file2.c

#include"file2.h"

void file2printf()

{

printf("hello world!\n");

}

那么它的makefile怎么写呢?(makefile文件和文件在同一目录下)

test:file1.o file2.o          //test依赖file1.o和file2.o两个目标文件

  gcc -c file1.o file2.o -o test    //编译出test可执行文件,-o 表示指定的目标文件名

file1.o:file1.c file2.h          //编译出file1.o文件,file1.o依赖于file1.c和file2.h,-c表示GCC只把给他的文件编译成目标文件  

  gcc -c file1.c -o file1.o

file2.o:file2.c file2.h                       //这两句与上两句相同

  gcc -c file2.c -o file2.o

.PHONY:clean

clean:

rm -rf* .o test      //当输入make clean命令时,就会删除所有的.o文件和test文件了

注意:每个命令行之前都必须有tab符号。

这是简单的makefile的写法,其实makefile还有很多的功能注意点值得学习。大家可以下去自行学习

以上这篇关于Linux下对于makefile的理解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 很多关于 linux 的书籍在前面章节中写了一大堆东西来介绍 linux,可惜读者看了好久也没有正式开始进入linux 的世界,这样反而导致了他们对 linux 失去了一些兴趣,而把厚厚的一本书丢掉。 Linux 的历史确实有必要让读者了解的,但是不了解也并不会影响你将来的 linux 技术水平。如果你感兴趣的话,那你去网上搜一下吧,一大堆呢足够让你看一天的。虽然我不太想啰嗦太多,但是关于linu

  • 主要内容:1.NoSql是什么?,2.NoSql数据类型,3.NoSql数据库的分类,4.NoSql的优点,5.说明1.NoSql是什么? Nosql = not only sql,意即“不仅仅是sql”,泛指非关系型数据库。这些类型的数据存储不需要固定的模式(当然也有固定的模式),无需多余的操作就可以横向扩展。 说到非关系型数据库,就要简单的介绍一下关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据,我们平常使用的数据库,像MySQL,Oracle

  • 1.a. 简介 欢迎! 首先, 欢迎来到 Gentoo! 您将进入一个充满自由选择与一流性能的世界! Gentoo 意味着一切皆可选择. 当您安装 Gentoo 的时候, 这句话所代表的深刻涵义将得到反复呈现 -- 您可以选择编译多少东西, 如何安装 Gentoo, 需要什么样的系统日志记录器 (system logger) 等等等等. Gentoo 是一个前卫的 (modern) 基于源代码包的

  • 本文向大家介绍关于linux中系统输入输出的管理详解,包括了关于linux中系统输入输出的管理详解的使用技巧和注意事项,需要的朋友参考一下 系统中输入输出的管理 1.理解系统的输入输出 linux系统中,1表示正确输出,2表示错误输出 2.管理输入输出的符号 (1)输出重定向(输出到指定的位置) 注意:以下实验应在普通用户中完成 file ##清空file(因为'>'符号输出时会覆盖源文件,所以>

  • 我有如下字符串: 如何设置格式,如下所示:

  • 主要内容:基于 xinetd 服务的启动,基于xientd 服务的自启动本节学习基于 xinetd 服务的管理方法。基于 xinetd 的服务同样有启动管理和自启动管理之分,而且不管是启动管理还是自启动管理,都只有一种方法,相比独立的服务简单一些。 基于 xinetd 服务的启动 基于 xinetd 的服务没有自己独立的启动脚本程序,是需要依赖 xinetd 的启动脚本来启动的。xinetd 本身是独立的服务,所以 xinetd 服务自己的启动方法和独立服务的启动方法