我正在构建一个将在Linux系统上运行的应用程序。目前,构建过程由一个简单的Makefile组成,它已经太复杂了。
现在,我想我错过了一些关于如何正确开发Linux应用程序的基本理解。我发现的信息是:
- 应用程序应该有一个
make install
目标,它可以将所有文件移动到正确的位置 - 通常安装应用程序的位置是
/usr/bin
或/usr/local/bin
- 数据文件应分别放在
/usr/share
或/usr/local/share
中。应该能够在构建过程中的某个位置配置路径前缀
有了这些信息,我现在想知道:
- 如何正确配置前缀:构建过程是否应该将路径作为参数并硬编码到代码中?这对测试也很重要——我应该能够以某种方式创建一个可运行的二进制文件,它只使用源文件夹中的数据文件,而不需要将所有东西都安装在某个地方
- 我应该使用自动工具还是cmake之类的?autotools至少看起来不仅仅是一个构建系统,而且还处理前缀配置等。这是正确的吗?cmake与之相比如何
- 这是合同工作,我真的应该关心这些事情吗?该应用程序只能在定义良好的客户系统上运行,因此我可以提供一个包含所有必要文件的文件夹,并且可以在该文件夹中执行该应用程序
因此,我基本上是在寻找一些好的资源,让我概述各种可能性和常见做法,并使我能够就是否以及如何调整构建和部署过程做出明智的决定。
您通常有一个/将脚本配置为在制作之前运行。此脚本用于检查相关性。设置编译时切换到项目特定的更改,等等。这也是设置前缀的地方,如果不提供前缀,通常应该安装到/usr/local。
如果以后为某些发行版创建包(*.rpm、*.deb…),则通常使用/usr/作为前缀。
因为写一个完整的是疯狂的/手动配置,gnu自动工具被广泛使用。他们一开始有点臃肿,有点痛苦,但做得很好。
你可以看一些教程,比如:http://markuskimius.wikidot.com/programming:tut:autotools/
我对cmake一无所知,因为我没有这方面的经验。
关于您的最后一个问题:
这是合同工作,我真的应该关心这些事情吗?该应用程序只能在定义良好的客户系统上运行,因此我可以提供一个包含所有必要文件的文件夹,并且可以在该文件夹中执行该应用程序。
是的,你应该关心这个。在更新和升级的情况下,这将简化你的生活。