我是一个在Linux上编程的新手。
我知道Makefile是用来在编译多个文件时简化编译过程的。而不是每次需要编译和运行程序时都编写"g++ main.cpp x.cpp y.cpp -o executable“,您可以将其放入Makefile中并在该目录中运行make。
我正在尝试让RPi和Arduino使用nRF24L01无线电互相通信,使用tmrh20的库here.我已经成功地使用tmrh20的Makefile来构建所需的可执行文件(在RPi上)。然而,我想使用tmrh20的库来构建我自己的可执行文件。
我已经在Makefiles上看了几个教程视频,但似乎仍然无法拼凑出tmrh20中正在发生的事情。
有问题的Makefile (1)是here.,我相信它以某种方式引用了第二个Makefile (2) (对于文件名?) here. (为什么这是必要的?)
为了帮助任何人理解(我花了一段时间),我不得不使用SPIDEV (指令here)构建RF24目录中的Makefile (3),它产生了几个我认为与Makefile (1)&(2)相关的目标文件。
如何从tmrh20的Makefile中找出我需要哪些文件来创建我自己的Makefile (如果这样做有意义的话?)他似乎在他的Makefile中使用了没有定义的变量?或者是在其他地方定义的?
为我糟糕的解释道歉。
发布于 2020-05-09 06:50:27
规范序列不仅仅是make和make install。有一个初始的./configure步骤(这样的文件是here),它设置所有内容并生成在make步骤中使用的几个文件。
您只需成功运行此configure脚本一次,除非您想要更改构建参数。我之所以说“成功”,是因为第一次执行时通常会抱怨缺少库或头文件。但是,由于./configure运行时没有错误,所以make和make install也应该运行时没有错误。
PS:我没有尝试编译它,但是由于这个项目有一个相当全面的configure,所以它很可能已经完成了,如果你遵循通常的程序,你应该不需要调整makefile。
发布于 2020-05-09 06:52:19
以您在这里提到并链接的方式拆分Makefiles的原因是将变量的定义从实现中分离出来。通过这种方式,您可以拥有多个基本Makefiles,它们以不同的方式定义它们的PROGRAM变量,但都基于该变量的值执行相同的操作。
在我个人看来,我在这里看到了一些价值-但有很多方法可以剥去这只众所周知的猫的皮。
在学习了GNU Make之后,我只能建议你也这样做。一开始有一个稍微陡峭的曲线,但是一旦你理解了主要的概念,遵循其他人的Makefile就会变得相当容易。
祝你好运:https://www.gnu.org/software/make/manual/html_node/index.html
https://stackoverflow.com/questions/61689130
复制相似问题