【问题标题】:Install same software/version with different compilers side-by-side并排安装具有不同编译器的相同软件/版本
【发布时间】:2017-04-27 02:42:19
【问题描述】:

为了开发/测试我们的 CFD 代码,我喜欢经常在 Clang(因为它的严格性/警告)和 GCC(为了性能)之间切换,但这需要它的一些依赖项(例如 NetCDF)用相同的编译器。

我知道 Homebrew 可以选择在它们之间安装多个版本的软件 side-by-sideswitch,但是是否可以使用相同的软件版本做类似的事情,但使用不同的编译器编译(通过设置 @987654323 @ 和 HOMEBREW_CXX)?

类似的东西(一厢情愿,在不知何故安装了带有 Clang 和 GCC 的 NetCDF 之后):

brew switch netcdf 4.3.3-gcc 
brew switch netcdf 4.3.3-clang 

【问题讨论】:

    标签: homebrew


    【解决方案1】:

    我认为这只有在您明确使用不同的版本号时才有可能,例如您使用“4.3.3-gcc”和“4.3.3-clang”的示例。

    如果版本号相同,则构建没有区别,brew 无法区分它们。

    我也不会这样做。

    1. 通过多种不同方式编译同一个库,您现在开始陷入依赖关系的噩梦。
    2. 依赖冲突。因为即使你换掉了“netcdf”,你怎么知道你也换掉了它的所有依赖项?如果它们不是使用相同的编译器编译的,则可能会发生不好的事情,例如,由于调用方式的差异或由于在一个编译器中为应用程序启用的选项及其在另一个中未启用的依赖项而导致的冲突,可能会发生冲突构建。

    我不建议这样做,太麻烦了。

    但是,如果您确实需要两个构建(例如用于测试),那么我会将它们构建到系统路径之外的隔离文件夹树,并在那里对它们进行任何测试。 Brew 不是解决此问题的最佳方法,因为这是一个非标准用例。

    【讨论】:

    • “我不建议这样做,太麻烦了”;总的来说,我会同意,但在这种情况下,依赖性“噩梦”非常小。 "...然后我会将它们构建到外部的隔离文件夹树...";这就是我目前正在做的事情,但是手动构建包。这可以用 Homebrew 处理吗?现在我通常复制粘贴 Homebrew 公式提供的构建选项/设置。
    • 正如我所提到的,仅通过使用不同的版本号。现在,每次您想通过使用您提到的编译器变量来切换编译器时,您“可以”重建包。但是,我有一种感觉,这不是你想要做的。 Brew 并不是为这个用例而设计的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多