热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

makefile浅析(二)Makefile变量

本文衔接上文部分代码。GNU的Make工具除了提供建立目标的基本功能之外,还有许多其他功能,其中之一就是变量或者宏的定义能力。program:mai

本文衔接上文部分代码。

GNU的Make工具除了提供建立目标的基本功能之外,还有许多其他功能,其中之一就是变量或者宏的定义能力。

program:main.o add.o dec.o div.o mul.o

       gcc  main.o add.o dec.o div.o mul.o -o program

字符串“main.o add.o dec.o div.o mul.o”被调用了两次,当出现大量程序更改极为不方便。于是这里出现了可以定义变量用来代替大量出现的.o文件名称。

在Makefile文件中可以这样定义:

objects=main.o add.o dec.o div.o mul.o

将代码更改为:

#makefile
objects = main.omain.o add.o dec.o mul.o div.o
program: $(objects)
program: $(objects)
        gcc $(objects) -o program
main.o:main.c main.h
        gcc -c main.c -o main.o
add.o:add.c
        gcc -c add.c -o add.o
dec.o:dec.c
        gcc -c dec.c -o dec.o
mul.o:mul.c
        gcc -c mul.c -o mul.o
div.o:div.c
        gcc -c div.c -o div.o
clean:
        rm *.o program

效果图:


之后如果有新的.o文件加入,只需要修改objects变量即可。

在Makefile中定义变量中有两种形式,一种是递归展开方式,另一种是简单方式。

Make中变量格式是:$(VAR)

Makefile中变量分为用户自定义变量,预定义变量,自动变量及环境变量。如objects是用户自定义变量,关于其他三个变量在网上都可以查到,在此不多赘述。

自动变量中:

$^    所有不重复的依赖文件,都以空格分开

$@  目标文件的完整名称

我编写一个makefile文件,在文件中引入预定义变量“CC”和“CFLAGS”,自动变量“$^”和“$@”。对于初学者很难,熟练掌握之后,就会发现这样增加了makefile编写灵活度。


#makefile

objects = main.omain.o add.o dec.o mul.o div.o

program: $(objects)

CC=gcc

CFLAGS=-Wall -O -g

program: $(objects)
        $(CC) $(CFLAG) -o $@

main.o:main.c main.h

         $(CC) $(CFLAG) -c main.c -o main.o

add.o:add.c

        $(CC) $(CFLAG) -c add.c -o add.o

dec.o:dec.c

        $(CC) $(CFLAG) -c dec.c -o dec.o

mul.o:mul.c

        $(CC) $(CFLAG) -c mul.c -o mul.o

div.o:div.c

        $(CC) $(CFLAG) -c div.c -o div.o

clean:

        rm *.o program


推荐阅读
  • [转]Makefile 使用总结
    2019独角兽企业重金招聘Python工程师标准1.Makefile简介Makefile是和make命令一起配合使用的.很多大型项目的编译都是通过Makefile来组织的,如 ... [详细]
  • 对于以压缩包形式发布的软件,其目录中通常包含一个配置脚本 `configure`。该脚本的主要功能是确定编译所需的各项参数,如头文件的位置和链接库的路径,并生成相应的 `Makefile` 以供编译使用。通过运行此脚本,开发者可以确保软件在不同环境下的正确编译与安装。此外,该脚本还能够检测系统依赖项,进一步提高编译过程的可靠性和兼容性。 ... [详细]
  • 我正在使用 Ruby on Rails 构建个人网站。总体而言,RoR 是一个非常出色的工具,它提供了丰富的功能和灵活性,使得创建自定义页面变得既高效又便捷。通过利用其强大的框架和模块化设计,我可以轻松实现复杂的功能,同时保持代码的整洁和可维护性。此外,Rails 的社区支持也非常强大,为开发过程中遇到的问题提供了丰富的资源和解决方案。 ... [详细]
  • 本文介绍了Android动画的基本概念及其主要类型。Android动画主要包括三种形式:视图动画(也称为补间动画或Tween动画),主要通过改变视图的属性来实现动态效果;帧动画,通过顺序播放一系列预定义的图像来模拟动画效果;以及属性动画,通过对对象的属性进行平滑过渡来创建更加复杂的动画效果。每种类型的动画都有其独特的应用场景和实现方式,开发者可以根据具体需求选择合适的动画类型。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 如何在Java中高效构建WebService
    本文介绍了如何利用XFire框架在Java中高效构建WebService。XFire是一个轻量级、高性能的Java SOAP框架,能够简化WebService的开发流程。通过结合MyEclipse集成开发环境,开发者可以更便捷地进行项目配置和代码编写,从而提高开发效率。此外,文章还详细探讨了XFire的关键特性和最佳实践,为读者提供了实用的参考。 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
  • 我正在Linux64bit下使用EclipseCDT编写一个简单的C共享库。代码对的rand()函数有一个引用它编译得很好但是在链接时报告来自链接器的以下错误:gcc-shared ... [详细]
  • 如何判断电容好坏?
    关注+星标公众号,不错过精彩内容来源 | 电子电路怎样测量小容量电容的好坏?1、检测10pF以下的小电容,因10pF以下的固定电容器容量太小,如果用指针式用万用表进行测量,只能定性 ... [详细]
  • 201720181 20155208 《信息安全系统设计基础》第五周学习总结
    2017-2018-120155208《信息安全系统设计基础》第五周学习总结学习目标理解逆向的概念掌握X86汇编基础,能够阅读(反)汇编代码了解ISA(指令集体系结构)理解函数调用 ... [详细]
  • arm-linux-gnueabihf-ld-Timx6ul.lds-oledc.elf$^链接脚本的主要目的是描述输入文件中的段如何被映射到输出文件中,并且控制输 ... [详细]
  • 个人博客https:juejin.cnuser176366088104638和http:blog.wuzhenyu.com.cncmake编译动态库和链接动态库cmake中&#x ... [详细]
  • ubuntu下基于c++的opencv学习
    一、环境配置1、安装opencv2、makefile编写makefile模板,与c文件在同一个目录下,用make指令生成可执行文件,然后运 ... [详细]
  • Elasticsearch 嵌套调用中动态类导致数据返回异常分析与解决方案 ... [详细]
  • Nginx入门指南:从零开始掌握基础配置与优化技巧
    Nginx入门指南:从零开始掌握基础配置与优化技巧 ... [详细]
author-avatar
轻梦云裳_904
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有