首页 > 其他分享 >Makefile

Makefile

时间:2023-11-06 15:48:49浏览次数:32  
标签:Makefile makefile 空字符 warning user clean strip

0 背景

在工作中,经常会与makefile打交道,但是有很多的时候,不明白其中的语法意思,这里主要记录一下常遇到的一些语法。

一、测试模板

很多时候,我们在理解一个知识的时候,有点难理解,我们可以自己写个测试文件来测试下,看看效果,加深理解。

$(warning warning:'this is a log info')

TARGET_BUILD_VARIANT ?= userdebug user

ifneq ($(filter user,$(TARGET_BUILD_VARIANT)),)
$(warning warning:'this is user')
else
$(warning warning:'this is not user')
endif

all:test

test:
        $(warning this is a test)

.PHONY:clean

clean:
        $(warning this is a clean)

将上面的部分,保存为makefile,这样我们就可以使用make 来进行测试了,其结果如下:

make:

makefile:1: warning:'this is a log info'
makefile:8: warning:'this is not user'
makefile:14: this is a test
make: Nothing to be done for 'all'.

#### build completed successfully  ####

make clean:

makefile:1: warning:'this is a log info'
makefile:8: warning:'this is not user'
makefile:19: this is a clean
make: Nothing to be done for 'clean'.

#### build completed successfully  ####

 

二、关键字strip

$(strip STR)
函数名称:strip。
函数功能:去掉字符串中多余的空格符(若干单词,使用若干空字符分割) “STR”开头和结尾的
空字符,并将其中多个连续空字符合并为一个空字符。
返回值:无前导和结尾空字符、使用单一空格分割的多单词字符串。
函数说明:空字符包括空格、[Tab]等不可显示字符。

示例:
STR = a b c
LOSTR = $(strip $(STR))

结果是:
a b c

“strip”函数经常用在条件判断语句的表达式中,确保表达式比较的可靠和健壮!

三、= 、:= 、?= 、+= 的区别

= 是最基本的赋值
:= 是覆盖之前的值
?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值

而 = 与 := 的区别在于,= 会在makefile 展开后再决定变量的值,即最后被指定的值

示例:
x = foo
y = $(x) bar
x = xyz
在上例中,y的值将会是 xyz bar ,而不是 foo bar 。

而:= 表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

在上例中,y的值将会是 foo bar ,而不是 xyz bar

标签:Makefile,makefile,空字符,warning,user,clean,strip
From: https://www.cnblogs.com/haoran123/p/17812835.html

相关文章

  • 自动化构建工具make/makefile详解
    一、工具介绍1.1为什么需要使用自动化项目构建工具呢在我看来,在平时写较少代码,只有1个源文件的时候,用make和不用make感觉差别不大,但是当项目源文件一多,需要一个个的去输入gcc进行编译,显然是十分麻烦的。所以make这个工具可以极大的提高项目完成后的测试工作。1.2make/makefile介绍......
  • uboot的Makefile添加c文件复制功能--Apple的学习笔记
    一,前言如何能快速知道哪些c被编译到boot了。通过看编译信息,通过看编译完成后的ouput文件夹中的o文件,能否直接copy这些c文件到某个文件夹中,这样搜索看代码定位比较容易。若makefile自己有全部的c路径,那么我做个脚本后处理下,copy这些路径的c即可,另外,makefile居然有复制o文件,那么我只......
  • 关于make/makefile/cmake的区别
    1.gcc可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。我们的程序只有一个源文件时,直接就可以用gcc命令编译它。如果我们的程序包含很多个源文件时,就发现很容易混乱而且工作量大,所以出现了下面make工具。2.makemake工具可以看成是......
  • makefile学习之编译器报错问题
    1、当使用makefile自动推导的功能时编译器报错ccJS7JEh.s:Assemblermessages:ccJS7JEh.s:5:Error:invalidinstructionsuffixfor`push'ccJS7JEh.s:7:Error:invalidinstructionsuffixfor`push'\ccJS7JEh.s:14:Error:operandtypemismatchfor`call'ccJ......
  • 原来Linux makefile可以如此简单
    作者:朱金灿  原来以为Linuxmakefile挺复杂的,直到从网上找到一个编译模板,发现Linuxmakefile是如此简单,而且你还可以根据该模板实现C程序和C++程序的混合编译。下面是Linuxmakefile模板的脚本代码:#指定c编译器CC=gcc#指定C++编译器C++=g++#指定链接器LINK=g++......
  • Makefile 入门
    一、Makefile简介什么是Makefile?很多做windows的程序员可能都没有接触过,因为windows的很多开发环境中都已经帮你做了这些事情,一键编译构建即可;但是要对工程的编译、链接、构建有一个专业的认识,或者要在linux上编程的话,就需要了解Makefile了。Makefile,人称“工程管理器”,它的作用......
  • 跟我一起写makefile(转载)
    最近想学习makefile,所以想当然就去找鼎鼎大名的《跟我一起写makefile》。不过后来因为我看着博客有点乱,而且我希望我没网的时候也能进行浏览。所以打算找离线版的。尽量pdf和离线html都有。github找到一个:https://github.com/seisman/how-to-write-makefile。跟着提示进行编译......
  • Shell-Makefile使用变量
    可以现在build.sh中source需要的config.sh配置文件,并export其中包含的变量。此时,变量在当前shell终端中生效。Makefile中只用变量应为${VAL}https://blog.csdn.net/mouday/article/details/128966176https://blog.csdn.net/QCZTZSWT357/article/details/102577134......
  • bilibili B站:从零开始学Makefile - 原作者笔记
    视频摘自B站:https://www.bilibili.com/video/BV1Bv4y1J7QT笔记摘自:https://gitee.com/yanmu_ym/cpp学习环境搭建Linux(以Ubuntu为例)sudoaptinstallgccg++makeWindows学习与演示过程以Windows为主,Windows上装MinGW环境,MinGW官网:https://www.mingw-w64.org/之前我们提过两个版......
  • bilibili B站:makefile 编译Linux C/C++项目快速入门
    视频摘自:https://www.bilibili.com/video/BV1vg41177zT    ......