2016-12-12 6 views
5

Для разработки/тестирования нашего кода CFD мне нравится часто переключаться между Clang (для его строгости/предупреждения) и GCC (для производительности), но для этого требуется некоторое его зависимостей (например, NetCDF), которые должны быть скомпилированы с одним и тем же компилятором.Установите то же программное обеспечение/версию с разными компиляторами бок о бок

Я знаю, что Homebrew имеет возможность установки нескольких версий программного обеспечения side-by-side и switch между ними, но это можно сделать что-то подобное, используя ту же версию программного обеспечения, но скомпилирован с различными компиляторами (путем установки HOMEBREW_CC и HOMEBREW_CXX)?

Нечто подобное (выдавать желаемое за действительное, после того, как-то установка NetCDF как с Clang и GCC):

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

ответ

2

Я думаю, что это возможно только, если вы явно имеют разные номера версий, как в примере, который вы использовали " 4.3.3-gcc "и" 4.3.3-clang ".

Если номер версии идентичен, то в сборках нет разницы, и варочная поверхность не может различать их.

Также я бы этого не сделал.

  1. Скомпилировав одну и ту же библиотеку несколькими разными способами, вы теперь начинаете входить в кошмар зависимости.
  2. Конфликты зависимости. Потому что, даже если вы замените «netcdf», как вы знаете, что вы поменяли все его зависимости? Если они не скомпилированы с одним и тем же компилятором, могут произойти плохие вещи, например, конфликты могут возникать из-за различий в способах создания вызовов или из-за параметров, включенных в одном компиляторе как для приложения, так и для его зависимостей, которые не были включены в другом строить.

Я не рекомендую это делать, это слишком много хлопот.

Но если вам действительно нужны две сборки (например, для тестирования), я бы построил их на отдельные деревья папок за пределами вашего системного пути и проверил бы там какое-либо тестирование против них. Brew - не лучший способ решить эту проблему, поскольку это нестандартный вариант использования.

+0

* «Я не рекомендую это делать, это слишком много хлопот» *; Я бы согласился в целом, но в этом случае зависимость «кошмар» очень минимальна. * "... тогда я бы построил их для изолированных деревьев папок вне ..." *; Вот как я сейчас это делаю, но создаю пакеты вручную. Можно ли это обрабатывать с помощью Homebrew? Теперь я обычно копирую-вставляю параметры/настройки сборки, предоставляемые формулой Homebrew. – Bart

+0

Как я уже говорил, только с использованием разных номеров версий. Теперь вы можете «перестроить пакет» каждый раз, когда хотите переключить компилятор, используя переменные компилятора, как вы упомянули. Но у меня такое чувство, что вы не пытаетесь это сделать. Brew просто не был разработан для этого прецедента. –