C 我真的应该用make吗?

C 我真的应该用make吗?,c,embedded,makefile,C,Embedded,Makefile,在某个时刻,我和一位同事从网上抓取了一个“示例”makefile,用于为xmega芯片构建嵌入式代码。我们发现这段经历非常令人沮丧。我们俩都不是专家,充其量只是新手。我们通过偶尔的调整/调整来获得成功。我们花了几个小时阅读、制作手册和投掷飞镖来尝试做更大的改变 通常当我们建造时,我们总是从一个干净的开始。因为自动依赖的一代似乎工作不可靠,我们刚刚了解到,这样更安全。由于它是一个嵌入式项目,在一个小型处理器上,编译实际上是快速的。眨眼间就完成了,这就引出了我真正的问题: 如果我没有使用make进行

在某个时刻,我和一位同事从网上抓取了一个“示例”makefile,用于为xmega芯片构建嵌入式代码。我们发现这段经历非常令人沮丧。我们俩都不是专家,充其量只是新手。我们通过偶尔的调整/调整来获得成功。我们花了几个小时阅读、制作手册和投掷飞镖来尝试做更大的改变

通常当我们建造时,我们总是从一个干净的开始。因为自动依赖的一代似乎工作不可靠,我们刚刚了解到,这样更安全。由于它是一个嵌入式项目,在一个小型处理器上,编译实际上是快速的。眨眼间就完成了,这就引出了我真正的问题:

如果我没有使用make进行任何依赖关系管理和利用增量构建,那么使用它而不是简单的shell脚本有什么真正的意义吗


我对编写C代码、python和优秀的ol'bash脚本更有信心。今天最令人沮丧的是,我们试图将一些与FreeRTOS相关的源文件移动到一个子目录中。make for us的唯一真正优势是它安装在OSX上,并且vi、QtCreator和XCode有一定的能力与我们的makefile集成(但我可以制作一个非常小的makefile,在这里桥接)。

除非您使用的是IDE,否则make实际上是这类事情的工具,除非你想沿着这条路走得更远,使用automake或类似产品。我认为这对你的案子来说太过分了

自动生成依赖项有些棘手,但您通常可以在web上找到一个有效的方法。我不确定你有什么具体的问题,但也许这值得一个单独的问题

可能一个bash脚本就足以满足您的需要;如果那是真的,那就去做吧。鉴于您对Python更为熟悉,您可能还希望了解类似的内容


我已经做了相当多的Makefile工作,但我正在转向Rake。我发现Ruby的强大功能比make更能满足我的需求。

几乎任何不是单个编译单元的非平凡C程序都会有自身的依赖性,而且几乎所有程序都依赖于系统库

除非您打算编写每次都执行干净构建的脚本,否则需要某种依赖关系管理工具来保持工作流程正常

make
是一个典型的选择,如果您首先找到一种自动生成依赖关系规则的方法,它非常适合做这份工作

QT构建系统本身并不与Makefiles集成,而是从更高级别的项目描述中创建它们
QTCreator
是围绕此过程提供GUI的众多工具之一。从
QTCreator
中编译时,实际上调用的是生成的
Makefile
。您还可以使用
qmake
生成XCode和Visual Studio工作区文件


QT构建系统实际上是嵌入式项目的一个相当好的选择,即使不使用QT,因为它相对容易设置以处理交叉编译。

Make是一个久负盛名的构建软件的专家系统。它仍然被大量广泛使用,因此值得学习。您可能很幸运,现在有一个几乎是即时构建的项目,但是根据我的经验,这是一个例外,而不是规则

考虑到Make的目的是依赖项跟踪和动作推断,将其作为批处理系统使用是零收益,而且它还会干扰您学习如何使用该工具(Make)

从你的帖子上看,你似乎与使用Make和子目录有冲突。虽然它可能无法解决您眼前的问题,但本文可能有助于解释这种情况,并让您深入了解Make本身的运作

Make不会自动生成依赖项。您将在网上找到许多关于如何自动为GNU Make生成依赖项的资源。我不确定OSX是否使用GNU Make或BSD Make(或者即使BSD变体仍然存在)。如果是后者(BSD),我相信您可以找到如何为BSD变量自动生成依赖项的方法

我在这篇文章中推断出的一个更具存在性的问题是:当这个旧工具不能给我的项目带来立竿见影的好处时,学习它是否有价值

作为回答,我会说:你的小项目是学习这个工具的绝佳机会。如果您面对的是一个增量编译确实可以节省时间的项目,那么痛苦阈值肯定会高得多

还有许多其他构建系统可以替代Make,例如:,,或者充当metamakefile生成器:,某些ide。更换的数量之多表明,许多人认为这是不够的(或者在某些情况下可能只是令人不快)

然而,在可预见的未来,对Make有一点了解可能会对你有好处。这也可能是理解构建系统如何工作以及与规则生成和依赖项跟踪相关的问题的第一步(或最明显的一步)


祝你好运。

这是我刚才问自己的问题。我个人使用python脚本为AVR()编译代码。我不是一个制造专家,但我确实有一些经验。不过,我觉得这很令人沮丧,对于坎特伯雷大学来说,这些需求毫无价值,除非你已经是专家了


我并不鼓励任何人这样做,但没有什么可以阻止您在Python中实现相同的依赖性检查(Perl、Ruby、Bash…),甚至可能更强大。我相信这只是一个语言选择的问题,或者你对什么感到舒服。make只是一种编程语言,对于初学者来说可能显得相当晦涩。

我个人不会直接使用make,几乎不管大小