我正在构建一个将在 Linux 系统上运行的应用程序。目前,构建过程由一个已经过于复杂的简单 Makefile 组成。
现在我想我缺少一些关于如何正确开发 Linux 应用程序的基本知识。我查到的信息是:
- 应用程序应该有一个
make install
目标,可以将所有文件移动到正确的位置。 - 安装应用程序的通常位置是
/usr/bin
或/usr/local/bin
。 - 数据文件应分别放在
/usr/share
或/usr/local/share
。应该能够在构建过程中的某处配置路径前缀。
有了这些信息,我现在想知道:
- 如何正确配置前缀:构建过程是否应该将路径作为参数并将其硬编码到代码中?这对于测试也很重要——我应该能够以某种方式创建一个可运行的二进制文件,它只使用源文件夹中的数据文件,而不需要将所有东西都安装在某个地方。
- 我应该使用 autotools 还是 cmake 之类的? autotools 至少似乎不仅仅是一个构建系统,而且还处理前缀配置等。它是否正确? cmake 比较如何?
- 这是契约(Contract)工,我真的应该关心这些事情吗?该应用程序将仅在定义明确的客户系统上运行,因此我可以提供一个包含所有必要文件的文件夹,然后可以从该文件夹中执行该应用程序。
因此,我基本上是在寻找一些好的资源,这些资源可以让我概述各种可能性和常见做法,并使我能够就是否以及如何调整构建和部署过程做出明智的决定。
最佳答案
在制作之前,您通常需要运行 ./configure 脚本。该脚本用于检查依赖关系。将编译时间开关设置为项目特定更改等。 这也是设置前缀的地方,如果你不给前缀,通常你应该安装到/usr/local。
如果您稍后为某些发行版创建包(*.rpm、*.deb ...),您通常会使用/usr/作为前缀。
由于手动编写完整的 ./configure 是疯狂的,gnu autotools 被广泛使用。 它们在开始时有点肿胀和疼痛,但做得非常好。
您可以查看一些教程,例如:http://markuskimius.wikidot.com/programming:tut:autotools/
我对 cmake 一无所知,因为我没有这方面的经验。
关于你的最后一个问题:
This is contract work, should I really care about these things? The application will only run on the customer's systems which are well-defined, so I could get away with supplying a folder that contains all necessary files, and the application could be executed from within that folder.
是的,你应该关心这个。在更新和升级的情况下,这将简化您的生活。
关于linux - 开发和部署 Linux 应用程序的基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18505078/