处理跨平台的二进制依赖项

时间:2009-07-09 06:32:15

标签: c++ cross-platform dependencies

我有一个C ++项目,我们有负载和大量的依赖项。该项目应该适用于Linux和Windows,因此我们已将其移植到CMake。现在,大多数依赖项都包含在源代码树中,并与项目一起构建,因此没有任何问题。

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

问题是,你如何处理这种依赖?只需检查支持平台的二进制文件,并要求用户以其他方式设置其构建环境(即,手动指向二进制位置),或者您是否真的尝试将它们编译(即使它需要安装像10个库 - BLAS库是这里最大的痛苦),还是有一些其他推荐的方法来处理它?<​​/ p>

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我同意,如果不经常修改每个平台,请检查二进制文件。这不仅可以减少构建时间,还可以减少不必要编辑的挫败感。

答案 2 :(得分:1)

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

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

哦,当然,如果你使用跨平台构建工具,它会更容易:)