Makefile编译原理 变量的使用

这篇具有很好参考价值的文章主要介绍了Makefile编译原理 变量的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.变量和不同的赋值方法

->makefile中支持程序设计语言中变量的概念

->makefile中的变量只代表文本数据(字符串)

->makefile中的变量名规则

   - 变量名可以包含字符,数字,下划线。

   - 不能包含 ":"  "#"  "="  " "

   - 变量名大小写敏感

CC := g++
TARGET := hello-world.out

$(TARGET) : func.o main.o
	$(CC) -o $(TARGET) func.o main.o

func.o : func.c
	$(CC) -o func.o -c func.c

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

.PHONY : rebuild clean all

rebuild : clean all


all : $(TARGET)

clean :
	rm *.o $(TARGET)

Makefile编译原理 变量的使用,Linux驱动,驱动开发

二.变量不同的赋值方式

->简单赋值(:=)

Makefile编译原理 变量的使用,Linux驱动,驱动开发

->递归赋值(=)

Makefile编译原理 变量的使用,Linux驱动,驱动开发

->条件赋值(?=)

Makefile编译原理 变量的使用,Linux驱动,驱动开发

->追加赋值(+=)

Makefile编译原理 变量的使用,Linux驱动,驱动开发

三.预定义变量的使用

$@: 当前规则中触发命令被执行的目标。

$^: 当前规则中的所有依赖。

$<: 当前规则中的第一个依赖。

例子1:

.PHONY : all first second third 

all : first second third
	@echo "\$$@ => $@"
	@echo "$$^ => $^"
	@echo "$$< => $<"
	
firtst:
second:
third:

输出:

$@ => all
$^ => first second third
$< => first

例子2:

CC := g++
TARGET := hello-world.out

$(TARGET) : func.o main.o
	$(CC) -o $(TARGET) func.o main.o

func.o : func.c
	$(CC) -o func.o -c func.c

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

.PHONY : rebuild clean all

rebuild : clean all


all : $(TARGET)

clean :
	rm *.o $(TARGET)

使用预定义变量修改后:文章来源地址https://www.toymoban.com/news/detail-790815.html

CC := g++
TARGET := hello-world.out

$(TARGET) : func.o main.o
	$(CC) -o $@ $^

func.o : func.c
	$(CC) -o $@ -c $^

main.o : main.c
	$(CC) -o $@ -c $^

.PHONY : rebuild clean all

rebuild : clean all


all : $(TARGET)

clean :
	$(RM) *.o $(TARGET)

到了这里,关于Makefile编译原理 变量的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【嵌入式Linux】编译应用和ko内核模块Makefile使用记录

    在Makefile中,变量的赋值可以使用以下几种方式: = :最基本的赋值符号,表示简单的延迟展开(lazy expansion)方式。变量的值将会在使用变量的时候进行展开。 := :立即展开(immediate expansion)的赋值方式。变量的值在赋值的时候立即展开,并且在后续的使用中不再改变。

    2024年02月08日
    浏览(53)
  • 【Linux】--- Linux编译器-gcc/g++、调试器-gdb、项目自动化构建工具-make/Makefile 使用

    格式: gcc [选项] 要编译的文件 [选项] [目标文件] , gcc / g++ 安装: sudo yum install -y gcc-c++ 。安装后的编译器默认的版本是较低的,我们可以 使用选项 -std=c99 (即使用c99标准), -std=c++11 (即使用c++11的标准)来进行版本提升 。使用 -o 选项,可以将编译生成的可执行重命名

    2024年03月10日
    浏览(103)
  • 【Linux驱动开发】编译Android12源码

    基于讯为电子rk3568教程 rk_android12.0_sdk_20220720.tar.gz 解压 设置屏幕配置 整体编译 Android 固件 使能编译环境 开始整体编译 rockdev/Image-rk3568_s // 编译成功镜像存放位置 单独编译u-boot (方法一) 编译完成后在 u-boot 目录会生成 rk356x_spl_loader_v1.13.112.bin 文件、uboot.img 文件、 resourc

    2024年02月05日
    浏览(48)
  • Linux开发工具大全 - 软件包管理器yum | vim编辑器 | gcc/g++编译器 | 自动化构建工具Make/Makefile | gdb调试工具

    目录 Ⅰ.  Linux 软件包管理器 yum 一、yum 背景知识 二、yum 的基本使用 1、查看软件包 2、软件包名称构成 3、安装软件 4、卸载软件 Ⅱ.vim编辑器  一、认识vim 1、vim概念  2、模式及其切换  二、vim使用 1、vim的指令(重要)  命令模式 插入模式 底行模式 2、vim配置 Ⅲ.gcc/g++编

    2024年02月05日
    浏览(55)
  • Linux:编写编译脚本Makefile文件

    一、生成可执行文件 1、一个源文件编译 本例子主要区别.c及.cpp文件及编译该文件时使用的编译链。 1).c文件 2) .cpp文件 经过以上测试,总结如下: 以.cpp为后缀的文件,为c++代码。代码最好使用C++语言。也可以使用c语言。 a 代码使用c++语言,编译时必须要用g++,不能使用

    2024年02月11日
    浏览(36)
  • Linux驱动开发笔记(二):ubuntu系统从源码编译安装gcc7.3.0编译器

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130533941 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中… 上一篇:《Linux驱动开发笔记(一

    2024年02月06日
    浏览(74)
  • linux | vscode | makefile | c++编译和调试

    简单介绍环境: vscode 、centos、 gcc、g++、makefile 简单来说就是,写好项目然后再自己写makefile脚本实现编译。所以看这篇博客的用户需要了解gcc编译的一些常用命令以及makefile语法。在网上看了很多教程,以及官网也看了很多次,最后自己一点多一点摸索,有的些许收获。 首

    2024年02月15日
    浏览(35)
  • Makefile——Linux下C/C++编译方法

    linux下常见的C语言项目相关的文件如下图所示。 通常使用GCC来编译C文件。编译过程为 源文件.c文件 - 预编译成.i文件 - 编译成汇编语言.s - 汇编成.o文件 - 链接成可执行文件 。编译命令为gcc -参数 .c -o 输出文件名称 预处理:将头文件拷贝进.c文件内容中,执行预编译命令。采

    2024年02月03日
    浏览(36)
  • 【Linux驱动】内核模块编译 —— make modules 的使用(单模块编译、多模块编译)

    编译驱动一般采用的是将驱动编译成模块(.ko 文件),然后加载到内核,这其中就用到了 make modules 命令。 目录 一、单模块编译 1、一个 c 文件编译成一个 ko 文件 2、多个文件编译成一个 ko 文件 二、多模块编译(多文件多模块) 下面是最简易的单文件单模块编译,假设我们

    2024年02月10日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包