一个比较复杂的makefile工程例子

STM32CubeMX GCC工程Makefile内容详解 关于STM32CubeMX生成的Makefile文件,其中的运行原理、参数以及作为修改方法的记录介绍。 阅读详情

工程目录

.
├── inc
│   └── utils.h
├── makefile
├── obj
└── src
    ├── main.c
    └── utils.c

文件内容

utils.h

#ifndef UTILS_H
#define UTILS_H

int add(int a, int b);

#endif // UTILS_H

main.c

#include <stdio.h>
#include "utils.h"

int main() {
    printf("Hello, World!\n");
    printf("Sum of 3 and 5 is: %d\n", add(3, 5));
    return 0;
}

utils.c

#include "utils.h"

int add(int a, int b) {
    return a + b;
}

makefile

# Makefile for a simple C project

# Compiler and flags
CC = gcc
CFLAGS = -Wall -I inc

# Directories
SRC_DIR = src
OBJ_DIR = obj
INC_DIR = inc

# Source files
SRC_FILES = $(wildcard $(SRC_DIR)/*.c)
# Object files
OBJ_FILES = $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRC_FILES))

# Executable name
EXEC = app

# Default target
all: $(EXEC)

# Link the object files to create the executable
$(EXEC): $(OBJ_FILES)
	$(CC) -o $@ $^

# Compile source files into object files
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
	$(CC) $(CFLAGS) -c $< -o $@

# Clean up
clean:
	rm -f $(OBJ_DIR)/*.o $(EXEC)

# Phony targets
.PHONY: all clean

make执行后

.
├── app
├── inc
│   └── utils.h
├── makefile
├── obj
│   ├── main.o
│   └── utils.o
└── src
    ├── main.c
    └── utils.c
工程管理文件makefile 阅读详情

相关推荐

ESP32开发(4):构建自己的工程

ESP32开发初学者,文章内容纯属个人经验,有错误在所难免,望见谅! 最小工程 ESP32通过Makefile和component.mk编译和组织工程文件。 下图是一个最小的可编译的工程框架 我们来看各个文件的内容 component.mk # # &amp;amp;amp;amp;amp;amp;quot;main&amp;amp;amp;amp;amp;amp;quot; pseudo-component makefile. # # (Uses default behaviour of

lovehanchenchen的博客 1万+

makefile详解

想要掌握makefile,首先需要了解两个概念,⼀个是⽬标(target),另⼀个就是依赖(dependency)。⽬标就是指要⼲什么,或说运⾏ make 后⽣成什么,⽽依赖是告诉 make 如何去做以实现⽬标。在 Makefile 中,⽬标和依赖是通过规则(rule)来表达的。 上面Makefile 中的 all 就是我们 的⽬标,⽬标放在‘:’的前⾯,其名字可以是由字⺟和下划线‘_’组成 。echo “Hello World”就是⽣成⽬标的命令,这些命令可以是任何你可以在你的环境中运⾏的命令以及 mak

szembed的博客 5928

Oracle到金仓数据库信创改造迁移实施规划方案

**性能测试和优化**:对金仓数据库的性能进行测试,根据业务负载情况进行必要的调优,确保系统能够稳定高效运行。- **数据兼容性**:评估Oracle数据库中的数据结构和金仓数据库的兼容性,明确需要重构的数据模型。- **性能测试**:通过对金仓数据库的性能测试,预估在实际业务环境下的表现,是否能达到业务需求。- **工具选择**:选择适合的迁移工具,如金仓数据库提供的迁移工具,能够提升迁移效率和准确性。- **全面迁移**:在初步迁移成功后,进行全面数据迁移,确保所有数据完整迁移到金仓数据库上。

hdrhdrjdididrr的博客 480

复杂多目录的Makefile模板及示例

大约一年多以前,还在移植u-boot,当时参考了u-boot的Makefile,做了一个多目录的Makefile模板。如今,一年过去了,本篇文章还是折腾Makefile模板,本人的水平由此可见一斑。当时的模板没有考虑很多东西,比如将源代码文件及目标文件分离。此次再写一个相对复杂的Makefile模板,自此之后,估计不想再折腾了。  本文的Makefile跟以往的模板一样,都是参考u-boot的做

李迟的专栏 7242

强化学习Q值迭代的几何视角:从策略区域到快速收敛

在强化学习中,Q值迭代是求解最优策略的核心算法,其理论基础建立在贝尔曼不动点定理之上。该算法通过迭代更新Q函数,使其逐步逼近最优值函数。从几何视角看,整个Q函数空间可被视为一个高维流形,每个Q函数对应流形上的一个点,而贝尔曼最优算子则定义了流形上的变换轨迹。理解这一几何结构,特别是由策略超平面划分出的凸多面体区域,对于分析算法的收敛行为至关重要。在实际工程中,传统Q值迭代可能在高维或稀疏奖励环境下收敛缓慢,甚至陷入策略高原。通过引入策略区域缓存与自适应学习率等几何启发方法,可以更高效地导航策略空间,加速策略

weixin_30444111的博客 319

保姆级教程:用CellOracle 0.10.13分析你的单细胞数据,从GRN构建到基因扰动模拟

本文详细介绍了如何使用CellOracle 0.10.13进行单细胞数据分析,从基因调控网络(GRN)构建到基因扰动模拟的全流程。通过环境配置、数据准备、GRN构建和扰动模拟等步骤,帮助研究者高效预测细胞命运决定的分子机制,特别针对实际分析中的易错点提供解决方案。

weixin_42525005的博客 437

手把手教你学Makefile--四、进阶篇:复杂项目的Makefile技巧4.3 并行编译:用make -j加速构建

并行编译的关键是:​​正确的依赖关系​​(Makefile的核心);​​make -j命令​​(无需修改Makefile,直接启用)。

amy_mhd的博客 895

SpringBoot与Flowable整合:构建高效审批工作流的实战指南

本文是一份SpringBoot与Flowable整合构建高效审批工作流的实战指南。通过一个经典的二级审批场景,详细介绍了从项目搭建、BPMN流程设计、核心服务编写到RESTful API构建的完整步骤。文章深入探讨了如何利用Flowable工作流引擎实现审批流程的自动化驱动与灵活管理,并分享了变量管理、监听器、异步执行等进阶技巧与常见避坑指南,帮助开发者快速构建健壮、可维护的企业级审批系统。

qsc9012345的博客 519

Makefile多文件工程管理

prereq-patterns 则是目标的“依赖”元素,可以理解为%.c,意思就是对target-pattern中的目标进行二次定义。如果所有依赖都存在,检查规则中的目标是否需要更新,必须先检查它的所有依赖,依赖中有任何一个被更新,则目标必须更新.(检查的规则是哪个时间大哪个最新–时间戳)"="是最普通的等号,在Makefile中容易搞错赋值等号,使用“=”进行赋值,变量的值是整个Makefile中最后被指定的值。Makefile的静态模式指的是一种自动编译模式,在这种模式下,我们很容易的定义“多目标”

小旺的博客 1197

金蝶云星空-协同开发云-安装开发环境

金蝶协同开发云就是不需要每一个开发都在自己的本机安装开发环境,自己安装可容易出错,包括源代码管理也一并解决了,大大减少了开发人员的工作量和降低了上手的难度。

qq_33881408的博客 5598

消费级显卡跑大模型:RTX 3060 12G 部署 70 亿参数 AI 编程助手的优化实战

本文详细介绍了如何在消费级显卡RTX 3060 12G上,通过量化、投机解码和分页KV-Cache等核心优化技术,成功部署并流畅运行70亿参数的CodeLlama-7B编程助手。文章提供了从环境配置、模型准备到参数调优的完整实战笔记,实测显存占用降至7.3GB,生成速度达21.7 token/秒,为开发者和技术爱好者提供了可行的本地AI部署方案。

weixin_29053067的博客 1259

复杂工程的makefile怎么写

使用MakeFile.env 控制 ########### MakeFile.env ########## Top level pattern, include by Makefile of child directory in which variable like TOPDIR, TARGET or LIB may be needed CC=gcc CPP=g++ MAKE=make AR...

d4567star的博客 853

20、基于图神经网络的脱氢焓预测方法研究

本文研究了基于图神经网络(GNN)的液态有机氢载体(LOHC)材料脱氢焓预测方法。通过分析现有GNN方法的局限性,提出了一种新的聚合自节点表示(AWS)方法,并结合丰富的原子特征和集成学习策略,显著提高了预测性能。实验结果表明,AWS在脱氢焓预测和多个基准化学性质预测任务中均优于现有GNN方法。此外,基于分子结构的集成方法进一步提升了模型的鲁棒性和准确性。研究展示了该方法在筛选LOHC材料中的潜力,并为未来预测更多化学性质奠定了基础。

pp12345的博客 103

什么是makefile

1什么是Makefile 在之前学习C程序的编译过程中,我们知道编译一个程序还比较简单, 如果要编译多个文件,或者不同文件夹中的文件,需要生成不同的库文件,以及确定这些文件的编译先后顺序,往往所需要的命令行特别多,而且比较复杂,甚至对于以后项目的维护也比较麻烦。 再想想如果我们需要编译Linux内核这样好几W个文件的项目难道需要我们一个命令的输入吗 ? 那估计是一场噩梦。 那么这个时候如果我们能够把所有的编译规则全部规范到文件中,然后通过解析该文件去执行对应的编译...

jinking01的专栏 1万+

031、速度前馈与加速度前馈

摘要: 本文通过追剪机调试案例,阐述了速度前馈和加速度前馈在运动控制中的关键作用。前馈不是高级技巧,而是解决动态响应问题的必要手段:速度前馈通过预测速度变化提前补偿,加速度前馈则针对惯量变化提供力矩补偿。实现时需注意信号平滑处理,避免噪声放大。前馈与PID分工明确,前馈承担主要动态响应,PID处理残余误差。调试应先调前馈再微调PID,前馈增益需计算而非仅凭参数调整,并允许适当残余误差。前馈作为开环补偿不会影响系统稳定性,但需配合平滑的指令生成器使用。(149字)

m0_50546716的博客 287

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Makefile实现工程管理文件

Makefile工程管理语法详解

weixin_44651073的博客 1244

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

多目录工程的makefile示例

本文来源于:http://www.360doc.com/content/12/0403/08/1317564_200410720.shtml转载请注明出处 本文代码虽简单,但涉及比较复杂的各种调用关系,欲研究者需有耐心及清醒头脑。 切切!背景交待: 1、正在移植U-Boot,并对其源代码进行了一些分析,感觉它的Makefile十分强劲; 2、以前写的Makefile模板不

mu0206mu的专栏 4395

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Makefile学习之ESP8266官方工程的Makefile

关于如何学习Makefile 成熟工程的Makefile编写会比较复杂,看相关的介绍总会觉得不理解,不清晰 可以尝试自己编写一个简单的Makefile去验证 比如我在一个文件夹下创建a.c 文件,并在同目录下编写一个Makefile,即可测试Makefile的相关语法 #a.c int main(){ return 0; }#Makefile LIBODIR := /hom

peyogoat的博客 3544

6、GNU makefile工程管理学习的一个例子

  在之前我们已经学习了一个文件的编译过程,但是做过项目的都知道,一个工程中的源文件不计其数,其按类型、功能、模块会分别放在若干个目录中,而这些文件如何编译就需要有一个编译规则,虽然现在很多大型的项目都是直接用诸如CMake、Autotools、SCons等工具生成的,但是对于一些小项目,使用工具就没有什么必要了,而且对于项目编写来说,掌握Makefile的基本知识对我们来说也是很有必要的。...

weixin_34245749的博客 168

工程管理文件Makefile及gcc编译过程

一、工程管理文件Makefile 1.什么是makefile? 用来管理一个工程中的所有关联文件的文件:头文件、源文件、库文件。。。 2.makefile文件在工程中一定要有吗? 不一定 一般原则,若编译命令比较复杂时,会写makefile文件 若源文件较多时,也会写 目的是为了简化编译时的复杂度 二、项目工程中的文件组成 1.简单版本 源程序 main.c 包含主函数main 功能函数 func1.c 功能函数 func2.c … 头文件 my_head.h 包含系统头文件,函数声明,宏定义,结构

hlhe_14的博客 1966

一个灵活通用的GNU makefile

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、自定义模块math二、主程序HelloMath三、主角makefile四、赏玩五、结语六、参考文献 前言 让我们通过编译一个简单的使用自己开发的模块的C语言程序来看看GNU make到底有多灵活。 一、自定义模块math 首先是头文件math.h: #ifndef math_h #define math_h int sum(int a, int b); #endif /* math_h */ 其实现math.c文件

Sarkuya的编程园地 1622

makefile很重要

导语 众所周知,一个程序从源码到可执行需要经过编译和链接两个步骤,而Makefile文件描述了整个工程的编译、链接规则。作为一个给力的Unix程序猿,必须要会写makefile嗷! 编译、链接 以C和C++举例,对于一段源码,首先要进行编译的过程,将源码编译成为中间代码文件,在windows下后缀名为.obj,在UNIX下后缀名是.o。然后进行链接过程,将所有的中间代码连接起来。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声

bbszhenshuai的博客 531

openwrt之一个Makefile实例

一个Makefile实例 Makefile规则比较复杂,小白只能一点点学习,这里以一个Makefile实例说明Makefile的一般结构 include $(TOPDIR)/rules.mk#一般在 Makefile 的开头 PKG_NAME:=ralink-wifi-mt7688#表示软件包名称,将在 menuconfig 和 ipkg 可以看到 PKG_RELEASE:=1#表示软件包版...

北京-大白的博客 3094

Eclipse编译:创建一个AURIX工程

本文根据Hightec编译器的帮助文档,学习如何创建一个AURIX工程,导入一个例程并编译。 文章目录1 Hightec帮助文档2 创建流程3 工程中的文件4 总结 1 Hightec帮助文档 博主安装的Hightec编译器版本是tricore v4.9.1.0,可以用于开发AURIX系列的微控制器。博主学习所用的是教程就是其中的帮助文档,位于安装路径的一个docs文件夹中。 其中,eclipse-quickstart-en.pdf文档就包含了通过eclipse建立一个AURIX工程的方法。 2 创建流程

u013288925的博客 4045

Makefile入门教程

转载自:https://mp.weixin.qq.com/s/mZu8Dn5fcPWjiZAODeCt2w Makefile入门教程 一口Linux 今天 以下文章来源于嵌入式情报局 ,作者情报小哥 关注、星标公众号,直达精彩内容 ID:嵌入式情报局 作者:情报小哥 1什么是Makefile 在之前学习C程序的编译过程中,我们知道编译一个程序还比较简单, 如果要编译多个文件,或者不同文件夹中的文件,需要生成不同的库文件,以及确定这些文件的编译先后顺序,往往所需要的命令行特别..

自主无人机 PX4 ROS SLAM 路径规划 MVS等技术分享 1434

第二十一篇,Makefile工程管理文件。

一、Makefile概念。 1、什么是Makefile? Makefile称之为工程管理文件,用于管理一个工程中所有关联的文件,例如:头文件、源文件、库文件... 2、Makefile在一个工程中是一定要写的吗? 不一定要写。如果编译命令比较复杂时,就会写Makefile。 项目中文件比较多的时候,一般都会去写Makefile去管理所有的文件。 项目中文件比较少的时候,一般不会去写Makefile,因为编译命令比较简单。 结论: 写Makefile目的就是为了简化编译时复杂度。 二、项目工程应该由哪些

weixin_44651073的博客 670
上一篇: makefile学习
下一篇: C语言读取data.json文件并存入MySQL数据库小案例
etsuyou
博客等级 码龄7年 160粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值