2009-07-09 56 views
2

我有一个C++项目,我们有负载和负载的依赖关系。该项目应该在Linux和Windows上工作,所以我们已经将它移植到CMake。大多数依赖关系现在都包含在源代码树中,并与项目一起构建,因此这些问题没有问题。处理跨平台的二进制依赖关系

但是,我们有一个依赖于Fortran代码等的二进制文件,构建起来非常复杂。对于Linux,它也不能作为软件包使用,但仅作为预编译的二进制文件或完整源代码(需要安装BLAS库和其他一些依赖项)。对于Windows,相同的库可用作二进制文件,为Windows构建似乎更加复杂。

问题是,你如何处理这种依赖关系?只需检查受支持平台的二进制文件,并要求用户另外设置其构建环境(即手动指向二进制位置),或者是否真的试图让它们一起编译(即使它需要安装10个库--BLAS库是这里最大的难题),还是有其他一些推荐的方法来处理这个问题?

回答

1

如果二进制文件与构建过程的其他部分无关,那么您应该明确地检入它。但是,因为你不能包含每个版本的二进制文件(我的意思是每个平台和用户可能使用的编译标志),所以从源代码构建似乎是强制性的。

我做了类似的事情。我检入了我需要的库/二进制文件的源代码档案。然后我编写了makefile/scripts来根据特定位置(没有标准的OS位置)中的目标平台/标志来构建它们,并使我的主构建过程指向正确的位置。我已经这样做了,以便能够处理我需要的库/二进制文件的正确版本和选项。在不同的平台上工作是一件非常艰苦的工作,但这是值得的!

哦,当然,如果你使用的跨平台的构建工具:)

1

给你一个问题。用户是否需要修改这个二进制文件,或者他们是否满意,可以使用/访问它?如果他们不需要修改它,请检查二进制文件。

+1

最终用户不应修改二进制文件更容易。唯一的问题是如果最终用户有不同的编译开关,二进制文件可能会变得不兼容,这就是为什么我想知道是否首先检查二进制文件是一个好主意。 – Anteru 2009-07-09 07:26:52

1

我同意,检查每个平台的二进制文件,如果他们不会经常修改。这不仅可以缩短构建时间,还可以减少不必要的编译带来的挫折。