尽管我自己编写了不少软件,并且认为自己在计算机方面知识渊博,但我从未成功地从源代码构建别人的项目永远不会。我试过了——哦,我试过了。总是缺少头文件、模糊错误、长得离谱的依赖链。即使某些东西真的编译了,它也会在启动时崩溃。
可以肯定的是,每一个现有的开源项目有问题,因此,这就是我。是否有任何教程或建议来处理从源代码构建项目的一般过程?或者,只要按照说明操作,它通常就能正常工作,在这种情况下,我显然被诅咒了?
答案1
请注意,这只是一个粗略的大纲,因为项目可能有很大差异。
可能最常见的失败原因确实是依赖性,或者缺乏代码可移植性。
首先确保安装了最新的 XCode。
我建议使用 MacPorts 或自制首先。这将使您可以立即访问许多开源软件包。
然后,如果您的项目不在提供的包列表中,前面提到的包管理器将允许您安装其直接依赖项(并依次递归安装它们的依赖项),比手动从源代码构建所述依赖项要容易得多。
接下来有两个选择供您选择:
- 您手动构建和管理项目
- 你创建一个 portfile(MacPorts)或一个公式(Homebrew),允许包管理获取、构建、安装和管理你的项目
如何构建您的项目很大程度上取决于项目本身及其编写语言。说明通常位于 INSTALL 或 README 文件中。
既然你谈到了头文件,我猜这是一个用 C 或 C++ 编写的程序。在这种情况下,构建过程通常如下:
./configure --prefix=/usr/local
make
确保设置前缀,以免使用疯狂默认值的项目覆盖 /usr/bin 中的系统内容。
如果所有依赖项都得到满足,configure
脚本应该会成功继续, 也应该会成功make
。如果出现问题,您可以指向或禁用configure
脚本的依赖项,由 提供的相关标志./configure --help
。
编译成功后,您可以继续通过 进行安装sudo make install
。
或者,尝试构建一个 portfile 或公式,它将执行构建步骤,但由包管理器管理。
包管理器路线有很多优点:
- 构建命令可以轻松重现到项目的新版本
- 卸载很容易处理
- 你可以贡献portfile/公式
- 你可以从为类似项目编写的现有 portfile/公式中获取灵感,以成功构建你的项目
抵制构建通用二进制文件的诱惑。这可能是一个棘手的问题,只有在您成功并先掌握常规构建后才可以尝试。
但请注意,有些项目不是以可移植的方式编写的(无论是由于必要性、不相关性还是缺乏意愿),并且无法在 Mac OS X 上构建。虽然这并不简单,但这可能是学习和将代码移植到新平台的机会……