如何覆盖,阻止或恢复Homebrew对编译标志的更改

Ale*_*lds 7 ruby macos homebrew

我正在调试由于构建变量被破坏而失败的Homebrew公式:

clang++ called with: -mmacosx-version-min=10.7 -arch i386 -Weverything -O3 -std=c++11 -stdlib=libc++ -lc++ objects/foo.o objects/bar.o -o ../bin/foo_i386
superenv removed:  -arch i386 -Weverything -O3
superenv added:    -pipe -w -Os -march=native -isystem/usr/local/include -isystem/usr/include/libxml2 -isystem/System/Library/Frameworks/OpenGL.framework/Versions/Current/Headers -L/usr/local/lib -L/System/Library/Frameworks/OpenGL.framework/Versions/Current/Libraries -Wl,-headerpad_max_install_names
superenv executed: clang++ -pipe -w -Os -march=native -mmacosx-version-min=10.7 -std=c++11 -stdlib=libc++ -lc++ objects/foo.o objects/bar.o -o ../bin/foo_i386 -isystem/usr/local/include -isystem/usr/include/libxml2 -isystem/System/Library/Frameworks/OpenGL.framework/Versions/Current/Headers -L/usr/local/lib -L/System/Library/Frameworks/OpenGL.framework/Versions/Current/Libraries -Wl,-headerpad_max_install_names
Run Code Online (Sandbox Code Playgroud)

我想保留superenv删除的标志,删除他们的替换(由superenv添加).

我确实想要指定体系结构和优化级别,而且我不需要编译链接到XML或OpenGL库到命令行应用程序,该应用程序不处理XML并且没有图形界面或呈现三维布局.

这是我的公式install块:

def install
    ENV.deparallelize
    system 'make all'
    system 'make install'
end
Run Code Online (Sandbox Code Playgroud)

我可以在installHomebrew公式的块中对Ruby环境变量进行任何更改,以防止原始标记被破坏(以及防止不必要的修改)?

什么是行不通的

该公式将与其他人共享.该公式需要是自包含的,就其所启用的设置而言.我不想重新配置和重新编译主Homebrew包管理器以保留标志,因为这将要求最终用户必须对其Homebrew安装进行相同的自定义.

Ale*_*lds 3

我发现以下修改有助于创建一个工作公式,以解决我的问题中概述的具体问题:

\n\n
class Foo < Formula\n    env :std\n    ...\n\n    def install\n        ENV.O3\n        ENV.deparallelize\n        ENV.delete('CFLAGS')\n        ENV.delete('CXXFLAGS')\n        system 'make', 'all'\n        system 'make', 'install'\n    end\nend\n
Run Code Online (Sandbox Code Playgroud)\n\n

添加env :std还不够 \xe2\x80\x94 Homebrew 不断添加架构和其他标志以及破坏构建过程的链接选项。删除CFLAGSCXXFLAGS更改有所帮助。

\n