makefile速通

makefile速通

文章目录

  • makefile速通
    • 1.基础
        • 显式规则
        • 隐含规则
          • %
          • *
          • 通配符
        • 赋值
          • =
        • 伪目标
        • CFLAGS
    • 2.函数
      • wildcard
      • patsubst
    • 3.项目实例

1.基础

显式规则
目标文件:依赖文件
[TAB] 指令
隐含规则
%
任意
*
所有
通配符
符号含义
$^所有依赖文件
$@所有目标文件
$<所有依赖文件的第一个文件
赋值
=
替换

:=

恒等于

?=

赋过值跳过,否则赋值

+=

追加
伪目标

.PHONY

执行操作而不产生中间文件的目标
.PHONY:clean
clean:rm -f $(OBJECTS)  $(TAGET)
CFLAGS
`CFLAGS` 是一个用于指定编译器选项的环境变量,常见于 C 语言的编译过程中。它通常用于传递给编译器(如 `gcc`)的额外选项,用来控制编译过程的行为。
`CFLAGS` 可以用来设置优化级别、调试信息、警告级别等。

常见的 CFLAGS 选项:

  1. 优化选项
    • -O0:关闭优化,通常用于调试。
    • -O1, -O2, -O3:开启不同级别的优化。-O2 是默认推荐的优化级别,-O3 提供最高优化(可能会增加编译时间和二进制大小)。
    • -Os:优化生成更小的代码,减少程序大小。
    • -Ofast:启用不保证标准合规性的优化,可能会使程序更快,但不一定与标准兼容。
  2. 调试选项
    • -g:生成调试信息,允许使用调试工具(如 gdb)调试程序。通常和 -O0 一起使用以保持源码的清晰性。
  3. 警告选项
    • -Wall:开启大多数常见的警告信息。
    • -Wextra:开启更多的警告信息,比 -Wall 更严格。
    • -Werror:将警告视为错误,编译器在出现警告时会停止编译。
  4. 标准与兼容性
    • -std=c99:使用 C99 标准编译源代码。
    • -std=c11:使用 C11 标准编译源代码。
    • -ansi:启用 ANSI C 标准(即 C89)。
  5. 其他选项
    • -D<macro>:定义宏常量,如 -DDEBUG 用于在代码中启用调试相关的宏。
    • -I<dir>:指定额外的头文件搜索路径,通常用于包含自定义的头文件。
    • -L<dir>:指定额外的库搜索路径,通常用于链接自定义的库。
    • -l<lib>:指定链接的库文件,如 -lm 用于链接数学库。

示例:

CFLAGS = "-O2 -Wall -g -std=c99"
  • 这个命令设置了以下选项:-O2:开启优化级别 2。
    -Wall:开启所有常见的警告。
    -g:生成调试信息。
    -std=c99:使用 C99 标准编译代码。
    

在 Makefile 中使用 CFLAGS

在 Makefile 中,通常会在编译规则中使用 CFLAGS 变量。例如:

CC = gcc
CFLAGS = -O2 -Wall -g -std=c99main: main.c$(CC) $(CFLAGS) -o main main.c

2.函数

wildcard

patsubst

3.项目实例

项目目录结构:

在这里插入图片描述

一级目录下:

.PHONY: app cleanSUB_PATH_APP = ./src/app
CROSS_COMPILE_PATH := /home/yckt/x2000_data_logger/sdk/X2000/sdk/prebuilts/toolchains/mips-gcc720-glibc229/bin/mips-linux-gnu-
export CROSS_COMPILE_PATH
app:$(MAKE) -C $(SUB_PATH_APP) ARCH=$(ARCH)clean:$(MAKE) -C $(SUB_PATH_APP) clean

二级app目录下:


.PHONY:clean arm allexport TARGET := x2000_data_loggerARCH ?= armBUILD_PATH := ../../../build
OUT_PATH := ../../../out
CROSS_COMPILE_PATH := /home/yckt/x2000_data_logger/sdk/X2000/sdk/prebuilts/toolchains/mips-gcc720-glibc229/bin/mips-linux-gnu-
export CROSS_COMPILE_PATHifeq ($(ARCH),x86)
CC = gcc
else
CC = $(CROSS_COMPILE_PATH)gcc
endifFINAL_TAGET := $(OUT_PATH)/$(TARGET)CFLAGS := -Wall -O2 -lpthreadSOURCES = $(wildcard *.c)
HEADERS = $(wildcard *.h)
OBJECTS = $(patsubst %.c, $(BUILD_PATH)/%.o, $(SOURCES))all: $(FINAL_TAGET)$(BUILD_PATH)/%.o: %.cmkdir -p $(dir $@)$(CC) $(CFLAGS) -c $< -o $@$(FINAL_TAGET): $(OBJECTS)mkdir -p $(dir $@)$(CC) $(CFLAGS) -o $@ $^clean:rm -f $(OBJECTS) $(FINAL_TAGET)

编译结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/61158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分数加减

#include <stdio.h> #include <stdlib.h>// 求最大公因数 int gcd(int a, int b) {return b 0? a : gcd(b, a % b); }// 化简分数 void simplify(int *num, int *den) {int g gcd(*num, *den);*num / g;*den / g;if (*den < 0) {*num * -1;*den * -1;} }//…

Misc_01转二维码(不是二进制)

例题ctfhub/隐写v2.0 打开是一张图片 文件分离得到zip&#xff0c;爆破密码得到7878 打开得到0和1&#xff0c; !!!不是二进制转图片&#xff0c;直接是二维码 缩小能看到 000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000…

如何修改网络ip地址:一步步指南‌

在当今这个数字化时代&#xff0c;网络已成为我们日常生活与工作中不可或缺的一部分。无论是浏览网页、在线办公还是享受流媒体服务&#xff0c;稳定的网络连接和适当的IP地址管理都是确保良好体验的关键。然而&#xff0c;出于隐私保护、绕过地理限制或测试网络环境等需要&…

STL——vector(1)

博客ID&#xff1a;LanFuRenC系列专栏&#xff1a;C语言重点部分 C语言注意点 C基础 Linux 数据结构 C注意点 今日好题 声明等级&#xff1a;黑色->蓝色->红色 欢迎新粉加入&#xff0c;会一直努力提供更优质的编程博客&#xff0c;希望大家三连支持一下啦 目录 尾…

iOS 18 导航栏插入动画会导致背景短暂变白的解决

问题现象 在最新的 iOS 18 系统中,如果我们执行导航栏的插入动画,可能会造成导航栏背景短暂地变为白色: 如上图所示:我们分别向主视图和 Sheet 弹出视图的导航栏插入了消息,并应用了动画效果。可以看到,前者的导航栏背景会在消息插入那一霎那“变白”,而后者则没有任何…

SPP:空间金字塔池化

今天水一篇博客&#xff0c;讲讲SPP池化结构&#xff1b;那这是个什么东西呢&#xff1f;它的作用又是什么呢&#xff1f;在了解它之前我们先简单了解一下大部分的神经网络&#xff1b; 引入&#xff1a; 在大部分的神经网络中&#xff0c;都将神经网络分为Backbone主干网络、…

网络安全与防范

1.重要性 随着互联网的发达&#xff0c;各种WEB应用也变得越来越复杂&#xff0c;满足了用户的各种需求&#xff0c;但是随之而来的就是各种网络安全的问题。了解常见的前端攻击形式和保护我们的网站不受攻击是我们每个优秀fronter必备的技能。 2.分类 XSS攻击CSRF攻击网络劫…

Python从0到100(七十三):Python OpenCV-OpenCV实现手势虚拟拖拽

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

Spring Cloud Alibaba [Gateway]网关。

1 简介 网关作为流量的入口&#xff0c;常用功能包括路由转发、权限校验、限流控制等。而springcloudgateway 作为SpringCloud 官方推出的第二代网关框架&#xff0c;取代了Zuul网关。 1.1 SpringCloudGateway特点: &#xff08;1&#xff09;基于Spring5&#xff0c;支持响应…

ssm139选课排课系统的设计与开发+vue(论文+源码)_kaic

摘 要 互联网的普及&#xff0c;改变了人们正常的生活学习及消费习惯&#xff0c;而且也大大的节省了人们的时间&#xff0c;由于各种管理系统都再不断的增加&#xff0c;更方便了用户&#xff0c;也改良了很多的用户习惯。对于选课排课系统查询方面缺乏系统的管理方式&#x…

网络基础 - NAT 篇

一、全局 IP 地址(公网 IP 地址)和私有 IP 地址 RFC 1918 规定了用于组建局域网的私有 IP 地址&#xff1a; 10.0.0.0 ~ 10.255.255.255172.16.0.0 ~ 172.31.255.255192.168.0.0 ~ 192.168.255.255 包含在以上范围内的 IP 地址都属于私有 IP 地址&#xff0c;而在此之外的 I…

Springboot3.3.5 启动流程之 tomcat启动流程介绍

在文章 Springboot3.3.5 启动流程&#xff08;源码分析&#xff09; 中讲到 应用上下文&#xff08;applicationContext&#xff09;刷新(refresh)时使用模板方法 onRefresh 创建了 Web Server. 本文将详细介绍 ServletWebServer — Embedded tomcat 的启动流程。 首先&…

NPOI 实现Excel模板导出

记录一下使用NPOI实现定制的Excel导出模板&#xff0c;已下实现需求及主要逻辑 所需Json数据 对应参数 List<PurQuoteExportDataCrInput> listData [{"ItemName": "电缆VV3*162*10","Spec": "电缆VV3*162*10","Uom":…

DAY113代码审计-PHPTP框架微P系统漏审项目等

一、环境安装 导入数据 Debug 版本信息收集 一、不安全写法的sql注入&#xff08;拼接写法绕过预编译机制&#xff09; 1、Good.php的不安全写法 2、查找可以参数 3、找路由关系 application/index/controller/Goods.php http://172.19.1.236:8833/index.php/index/goods/aj…

Flink1.19编译并Standalone模式本地运行

1.首先下载源码 2.本地运行 新建local_conf和local_lib文件夹&#xff0c;并且将编译后的文件放入对应的目录 2.1 启动前参数配置 2.1.2 StandaloneSessionClusterEntrypoint启动参数修改 2.1.3 TaskManagerRunner启动参数修改 和StandaloneSessionClusterEntrypoint一样修改…

Ascend C算子性能优化实用技巧05——API使用优化

Ascend C是CANN针对算子开发场景推出的编程语言&#xff0c;原生支持C和C标准规范&#xff0c;兼具开发效率和运行性能。使用Ascend C&#xff0c;开发者可以基于昇腾AI硬件&#xff0c;高效的实现自定义的创新算法。 目前已经有越来越多的开发者使用Ascend C&#xff0c;我们…

计算机编程中的测试驱动开发(TDD)及其在提高代码质量中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机编程中的测试驱动开发&#xff08;TDD&#xff09;及其在提高代码质量中的应用 计算机编程中的测试驱动开发&#xff08;T…

前后端交互之动态列

一. 情景 在做项目时&#xff0c;有时候后会遇到后端使用了聚合函数&#xff0c;导致生成的对象的属性数量或数量不固定&#xff0c;因此无法建立一个与之对应的对象来向前端传递数据&#xff0c;这时可以采用NameDataListVO向前端传递数据。 Data Builder AllArgsConstructo…

[笔记]L6599的极限工作条件考量

0.名词 OTP over tempature protect.OCP over current protectOVP over voltage protectBrownout Protection Undervoltage Protection可能需要考虑hysteresis response.因为要考虑一些高频干扰 1.基本的过流保护逻辑 参考&#xff1a;ST L6599 器件手册 LLC开关电源&#…

【Pikachu】XML外部实体注入实战

若天下不定&#xff0c;吾往&#xff1b;若世道不平&#xff0c;不回&#xff01; 1.XXE漏洞实战 首先写入一个合法的xml文档 <?xml version "1.0"?> <!DOCTYPE gfzq [<!ENTITY gfzq "gfzq"> ]> <name>&gfzq;</name&…