Makefile 解释。理解别人的 Makefile
Posted
技术标签:
【中文标题】Makefile 解释。理解别人的 Makefile【英文标题】:Makefile explanation. Understanding someone else's Makefile 【发布时间】:2020-05-08 22:13:43 【问题描述】:我对 Linux 编程比较陌生。
我了解 Makefile 用于在编译多个文件时简化编译过程。 不必每次需要编译和运行程序时都编写“g++ main.cpp x.cpp y.cpp -o 可执行文件”,而是可以将其放入 Makefile 并在该目录中运行 make。
我正在尝试使用 tmrh20 的库 here. 使用 nRF24L01 无线电使 RPi 和 Arduino 相互通信我已经成功地使用 tmrh20 的 Makefile 来构建所需的可执行文件(在 RPi 上)。但是,我想使用 tmrh20 的库来构建我自己的可执行文件。
我已经观看了一些关于 Makefile 的教程视频,但似乎仍然无法将 tmrh20 中发生的事情拼凑起来。
有问题的 Makefile (1) 是 here. 我相信它以某种方式引用了第二个 Makefile (2)(用于文件名?)here.(为什么这是必要的?)
如果它帮助任何人理解(我花了一段时间)我必须使用 SPIDEV(指令here)构建 RF24 目录中的 Makefile (3),它生成了几个我认为与 Makefile 相关的目标文件( 1)&(2)。
我如何从 tmrh20 的 Makefile 中找出我需要哪些文件来制作我自己的 Makefile(如果这有意义的话?)他似乎在他的 Makefile 中使用了未定义的变量?或者也许在别处定义?
为我糟糕的解释道歉。
【问题讨论】:
我怀疑,这个问题可能更适合 ***? 在我看来,这对 SO 来说太宽泛了。我没有时间弄清楚这个工具的整个构建环境,但我会说 Makefile.example (Makefile 1) 引用 Makefile (Makefile 2) 的情况并非如此。这是相反的方式。 Makefile 包含include Makefile.examples
,这就是它的作用。要了解 make 和 Makefile,您可以调查:gnu.org/software/make/manual/html_node/index.html
【参考方案1】:
规范序列不仅仅是make
和make install
。有一个初始的./configure
步骤(这样的文件是here)设置所有内容并生成在make
步骤中使用的多个文件。
您只需成功运行此configure
脚本一次,除非您想更改构建参数。我说“成功”是因为第一次执行通常会抱怨您缺少库或头文件。但是因为 ./configure
运行时没有错误,make
和 make install
应该运行时没有错误。
PS:我没有尝试编译它,但由于该项目有一个相当全面的configure
,它可能已经完成,如果你按照通常的程序,你应该不需要调整 makefile。
【讨论】:
【参考方案2】:以您在此处提到并链接到的方式拆分 Makefile 的原因是将变量的定义与实现分开。这样,您可以拥有多个基本 Makefile,它们以不同方式定义其 PROGRAM
变量,但都基于该变量的值执行相同的操作。
在我个人看来,我在这里看到了一些价值 - 但是有很多方法可以剥掉这只众所周知的猫。
在艰难地学习了 GNU Make 之后,我只能建议你也这样做。一开始有一个稍微陡峭的曲线,但是一旦你掌握了主要概念,就可以跟随其他人 Makefiles 变得非常容易。
祝你好运:https://www.gnu.org/software/make/manual/html_node/index.html
【讨论】:
以上是关于Makefile 解释。理解别人的 Makefile的主要内容,如果未能解决你的问题,请参考以下文章