Linux系统编程 36 -makefile的一个规则

Makefile文件的编写 文章目录前言一、最简单的 Makefile 文件举例二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 前言 Makefile文件的编写规则及内容 一、最. 阅读详情

Linux系统编程 36 -makefile的一个规则
学习笔记

从静态库文件中拷贝文件

$cd 36maketest/
$ls
add.c  add.o  div1.c  div1.o  sub.c  sub.o
$rm ./*.o

add.c 程序

$cat add.c
int add(int a,int b)
{
    return (a+b);
}

div1.c 程序如下

$cat div1.c
int div1(int a, int b)
{
    return (a/b);
}

sub.c 程序如下:

$cat sub.c 
int sub(int a, int b)
{
    return (a-b);
}


hello.c 程序如下:

$cat hello.c 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<pthread.h>

int add(int , int);
int sub(int , int);
int div1(int ,int);

int main(int argc, char *argv[])
{
    int a =10, b=5;
    printf("%d+%d = %d\n",a,b,add(a,b));
    printf("%d-%d = %d\n",a,b,sub(a,b));
    printf("%d/%d = %d\n",a,b,div1(a,b));
    return 0;
}

几个c文件多文件联编生成一个可执行文件

$gcc  hello.c sub.c add.c div1.c -o a.out
$./a.out
10+5 = 15
10-5 = 5
10/5 = 2
$
$ls
add.c  a.out  div1.c  hello.c  sub.c
$rm a.out

制作makefile

$cat makefile 
a.out:hello.c add.c sub.c div1.c
    gcc hello.c add.c sub.c div1.c -o a.out

make

$make
gcc hello.c add.c sub.c div1.c -o a.out
$./a.out
10+5 = 15
10-5 = 5
10/5 = 2

有些不合理的地方

如果是几个人一起维护,每个人负责一个.c
如果只有一个.c有变化,按上面的话,每次都要全编。
而全编实际上不合理。


因此要做修改

正常生成执行文件的过程

$ls
add.c  add.o  a.out  div1.  div1.c  div1.o  hello.c  makefile  sub.c  sub.o
$gcc add.o sub.o div1.o hello.o -o a.out
gcc: error: hello.o: No such file or directory
$gcc -c  hello.c -o hello.o
$gcc add.o sub.o div1.o hello.o -o a.out

$./a.out
10+5 = 15
10-5 = 5
10/5 = 2

 新的makefile

$cat makefile
a.out:hello.o add.o sub.o div1.o
    gcc hello.o add.o sub.o div1.o -o a.out

hello.o:hello.c
    gcc -c hello.c -o hello.o

add.o:add.c
    gcc -c add.c -o add.o

sub.o:sub.c
    gcc -c sub.c -o sub.o

div1.o:div1.c
    gcc -c div1.c -o div1.o

make命令 

$rm ./*.o
$make
gcc -c hello.c -o hello.o
gcc -c add.c -o add.o
gcc -c sub.c -o sub.o
gcc -c div1.c -o div1.o
gcc hello.o add.o sub.o div1.o -o a.out
$./a.out
10+5 = 15
10-5 = 5
10/5 = 2


修改div1.c

$vi div1.c
$cat div1.c
int div1(int a, int b)
{
    return (a/b/2);
}


按照想法
提高编译速度,加法 减法 hello都应该略过

$make
gcc -c div1.c -o div1.o
gcc hello.o add.o sub.o div1.o -o a.out
$./a.out
10+5 = 15
10-5 = 5
10/5 = 1

为什么makefile 这么智能


1.检查规则中的目标是否需要更新;必须先检查他的所有依赖,
  依赖中有任意一个文件被更新,则目标必须更新 
白话:当依赖条件比目标文件晚的时候
  说明依赖改了,所以目标也需要更新  
2.依赖条件如果不存在,找寻新的规则去产生或者创建依赖

makefile 为什么反着写的

修改makefile

$cat makefile 


hello.o:hello.c
    gcc -c hello.c -o hello.o

add.o:add.c
    gcc -c add.c -o add.o

sub.o:sub.c
    gcc -c sub.c -o sub.o

div1.o:div1.c
    gcc -c div1.c -o div1.o

a.out:hello.o add.o sub.o div1.o
    gcc hello.o add.o sub.o div1.o -o a.out

$rm ./*.o a.out
$ls
add.c  div1.  div1.c  hello.c  makefile  sub.c
$make
gcc -c hello.c -o hello.o
$


发现只执行一条语句
gcc -c hello.c -o hello.o
  
为什么?
因为它是第一行

makefile 默认属性:把makefile碰到的第一组规则当中的目标作为
终究任务目标

可以修改终极目标(要知道)

All:a.out

$ls
add.c  div1.  div1.c  hello.c  makefile  sub.c
$vi makefile 
$cat makefile 
#a.out:hello.c add.c sub.c div1.c
#    gcc hello.c add.c sub.c div1.c -o a.out
#zhiding zhongji mubiao 
All:a.out
hello.o:hello.c
    gcc -c hello.c -o hello.o

add.o:add.c
    gcc -c add.c -o add.o

sub.o:sub.c
    gcc -c sub.c -o sub.o

div1.o:div1.c
    gcc -c div1.c -o div1.o

a.out:hello.o add.o sub.o div1.o
    gcc hello.o add.o sub.o div1.o -o a.out

 make

$make
gcc -c hello.c -o hello.o
gcc -c add.c -o add.o
gcc -c sub.c -o sub.o
gcc -c div1.c -o div1.o
gcc hello.o add.o sub.o div1.o -o a.out

Linux kernel简单驱动模型和Makefile文件 目录: 1:hello word驱动 2:Makefile的分类 3:外部模块编译 4:内部模块编译 5:总结 正文: 1:hello word驱动代码 2:Makefile的分类 Kernel Makefile kernel Makefile位于内核源码的顶层目录,也叫TOP Kernel,编译整个内核或者模块时,首先被读取,配置整个内核的环境变量; Kbuild 阅读详情

相关推荐

在 Linux 虚拟机中手动安装 VMware Tools

对于 Linux 虚拟机,您可以从命令行手动安装 VMware Tools。对于 Linux 的较高发行版,请使用集成的 open-vm-tools 版本。 前提条件 有关 open-vm-tools 的操作系统兼容性的详细信息,请参见《VMware 兼容性指南》,网址为VMware Compatibility Guide - System Search。 开启虚拟机。 确认客户机操作系统正在运行。 因为 VMware Tools 安装程序是使用 Perl 编写的,请确认已在客户机操作系统中安..

m0_62526815的博客 1757

Makefile模板之 sub.c main.c

________________________________________________________________________________________   src := $(shell ls *.c)   objs := $(patsubst %.c, %.o, $(src))   test: $(objs)   gcc -o $@ $^   %.o:%.c

u013364948的专栏 611

Ansys Lumerical | 薄膜铌酸锂电光调制器的仿真与优化

本文详细介绍了使用Ansys Lumerical进行薄膜铌酸锂电光调制器仿真与优化的全流程。从基础原理到电学仿真、光学模拟技巧,再到设计优化实战经验,帮助工程师掌握这一先进光电器件的仿真方法。重点解析了薄膜铌酸锂的Pockels效应和Mach-Zehnder结构设计,并提供了常见问题排查指南和最新发展动态。

vulkan6gpu的博客 1199

【makefile】初步学习

makefile简单示例学习

v_ampire_的博客 1029

DeepSeek+Coze扣子搭建智能体(保姆级教程)

DeepSeek+Coze扣子搭建智能体(保姆级教程)

yizhen91y的博客 1万+

从零到一:高通Memory QMVS测试环境搭建的避坑指南

本文详细介绍了高通Memory QMVS测试环境搭建的全流程避坑指南,涵盖硬件选择、软件配置、QMVS核心组件安装及测试执行技巧。重点解析了adb工具配置、QPST日志抓取等关键步骤,帮助工程师高效搭建稳定测试环境,避免常见兼容性和稳定性问题。

weixin_29251567的博客 557

makefile实现创建目录和复制.ko文件

如果已经创建了对应项目的目录就不需要·make file了。

weixin_52849254的博客 2250

QGis二次开发 —— 5.1、基于qgis开发雷达扫描、无人机飞行跟踪等(附:源码及工程)

基于qgis开发雷达扫描、无人机飞行跟踪等

325

make file拷贝后缀相同的文件到指定目录下

需要将当前目录下的所有so文件拷贝到/system/lib目录下,应该怎么写命令呢。命令如下:PRODUCT_COPY_FILES += \$(call find-copy-subdir-files,*.so,$(LOCAL_PATH)/lib_VScreen,system/lib)

hedalei的博客 557

innovus:streamOut gds中pg text带有冒号(:)解决办法

streamOut后查看layout,发现部分PG text后面加了冒号,比如VDD: / VSS:。当然,这个问题还有另一种解决办法,就是通过脚本给terminal打text再streamOut。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1190

【数字孪生工业应用实战】第2篇:数字孪生系统架构设计与技术选型——从“作秀”到“实干”的骨架构建

本文系统剖析了数字孪生系统从“作秀”到“实干”的架构设计关键。针对多数项目在POC转生产时因架构混乱、选型盲目而失败的问题,深入阐述了四层分层架构(感知层、传输层、模型层、应用层)的设计原则,重点解析了感知层的异构适配与边缘预处理、传输层的异步解耦与多模式通信等工程细节。结合OPC UA、MQTT、EdgeX Foundry等主流技术选型对比,以及汽车焊装车间边缘智能网关的实战代码,提供了从零搭建微型孪生系统的完整指导。旨在帮助工程师建立清晰的选型决策逻辑,构建稳定、可演进的数字孪生“骨架”。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 267

【Makefile】Makefile编写规则

Makefile编写规则

目前从事C/C++开发,对Linux驱动开发、Qt应用开发、ROS开发方向感兴趣。 3318

掌握 Unity 中的状态机:综合指南

最后,将拥有一个由状态机驱动的功能齐全的播放器控制器,可以集成到自己的项目中。此外,状态机有助于实现复杂的人工智能、玩家控制、动画系统等,从而形成更强大、更灵活的游戏架构。状态机是计算机科学和游戏开发中的一个基本概念,它通过定义一组有限的状态及其之间的转换来模拟实体的行为。你可以定义常见的状态行为,例如 Enter、Update 和 Exit 方法,确保整个状态机架构的一致性和连贯性。由于前面提到的状态类扩展了 BaseState 类,因此我们可以为具有不同状态的不同对象创建单独的类。

yolo模型训练找我,AI游戏合作找我 1453

linux-makefile

linux-makefile

m0_37792813的博客 991

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

makefile 规则

内存管理第一谈:段式管理和页式管理 https://blog.youkuaiyun.com/jy1075518049/article/details/43610569 LINUX 逻辑地址、线性地址、虚拟地址和物理地址 https://blog.youkuaiyun.com/baidu_35679960/article/details/80463445 万能makefile写法详解,一步一步写一个实用的makefile,详解 sed 's,$∗\.o[ :]*,\1.o $@ : ,g' < $@. https://b

happylzs2008的专栏 387

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Linux kernel config and makefile system

http://www-900.ibm.com/developerWorks/cn/linux/kernel/l-kerconf/2003 年 2 月随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 Linux 内核级的开发中。面对日益庞大的 Linux 内核源代码,开发者在完成自己的内核代码后,都将面临着同样的问题,即如何将源代码融入到 Linux 内核中,增加相应的 Linux 配置选项,并最终被编译进 Linux 内核。这就需要了解 Linux 的内核

dreamxu的专栏 4486

Linux 的makefile的撰写

一点睛 makefile中会定义一系列规则,指定哪些文件先编译,哪些文件后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。 makefile带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译。 make命令是一个命令工具,是一个解释makefile中指令的命令工具。 makefile关系到整个工程的编译规则。 makefile就像一个shell...

实践求真知 756

Linux下C++的通用Makefile与解析

转载:https://www.cnblogs.com/delmory/p/3991683.html Linux下C++的通用Makefile与解析 本文给出万能Makefile的具体实现,以及对其中的关键点进行解析。所谓C++万能Makefile,即可编译链接所有的C++程序,而只需作很少的修改。 号称万能Makefile,一统江湖。我对原版的Makefile做了些修改。首先揭开它的庐山真面...

倦鸟归时 970

Linux系统编程总结

Linux系统编程总结1. Linux指令压缩解压缩指令2. sed指令3. awk指令4. 软件安装与配置5. C++6. Java7. Python8. Shell新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可...

笨笨的企鹅的专栏 1万+

【Linux | 系统编程】01 Linux基础命令与编译工具链

本文梳理了 Linux 体系结构、核心 shell 命令、编译工具链三大模块,涵盖内核、系统调用、文件目录操作、编译调试、Makefile 及静态 / 动态库等关键知识点。

m0_62539997的博客 1110

makefile学习(1)

GNU Make / Makefile 学习资料 GNU Make学习总结(一) GNU Make学习总结(二) 这篇学习总结,从一个简单的小例子开始,逐步加深,来讲解Makefile的用法。 最后用上面总结过的知识,给出了一个通用的C/C++ Makefile 文中提到《GNU 项目管理》一书,有280页。我觉得初学没必要看这么厚的书。豆瓣上对其评价也是不太实用。等...

weixin_30670965的博客 68

【Linux】make指令的使用和makefile文件的编写

【Linux】make指令的使用和makefile文件的编写导语make指令的使用什么是make指令make指令有哪些功能makefile文件的编写示例代码使用变量自动推导 导语 当我们编译一两个源文件时,我们可以直接使用gcc进行预处理、编译、汇编、链接等等。 例如: $ gcc file1.c file2.c -o target 在这种情形下,我们通常不会感到不便。 但是如果文件数量增加到3...

weixin_43621681的博客 8485

Linux 编程学习笔记----动笔makefile档

Befroe Beginning. 在设置暑假的plan ,关于Linux的书籍如今在看的是ALP和Linux高级程序设计(杨宗德)第三版.在计划中的是Linux高级环境编程. 如今開始关于Linux程序设计的第一篇学习笔记. 本来打算把名字写成教程,只是认为自己全然是新手在自学,还是写学习笔记比較负责和适合. 希望能够一起学习进步. 引入 首先我们如果这样一个场景.我...

weixin_30498807的博客 86

Makefile 怎么写

是Makefile的规则通配符,它会对后面的集合进行二次定义,当make准备生成test时,会发现其依赖于许多.o,当看到类似于%.o : %.c的语句时,会将前面所依赖的.o逐一展开,并将.c前的%替换为相应名称前缀的.c,如下:%.o : %.c等价于a.o : a.cb.o : b.c……符号是Unix系统的通配符,表示所有。

viviiuw的博客 765
上一篇: Linux系统编程 35 -makefile基础规则
下一篇: Linux系统编程 37 -makefile2个函数和clean
sinat_36070482
博客等级 码龄10年 118粉丝 97原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值