我有一个基于 Rebar 的 Erlang 应用程序,它构建了一个端口程序。此端口程序是 Linux 特定的,因此在 Mac OS 上编译失败。但是,我希望 Rebar 在 Mac OS 上构建时跳过端口程序。我怎样才能做到这一点?
当前的规范rebar.config
如下所示:
{port_specs, [{"priv/my_port", ["c_src/foo.c", "c_src/bar.c"]}]}.
我有一个基于 Rebar 的 Erlang 应用程序,它构建了一个端口程序。此端口程序是 Linux 特定的,因此在 Mac OS 上编译失败。但是,我希望 Rebar 在 Mac OS 上构建时跳过端口程序。我怎样才能做到这一点?
当前的规范rebar.config
如下所示:
{port_specs, [{"priv/my_port", ["c_src/foo.c", "c_src/bar.c"]}]}.
如rebar_port_compiler.erl 中的注释中所述,列表元素port_specs
有另一种形式{ArchRegex, TargetFile, Sources}
。所以像这样编写你的 Rebar 配置:
{port_specs, [{"linux", "priv/my_port", ["c_src/foo.c", "c_src/bar.c"]}]}.
“那个正则表达式匹配的是什么?”,你可能会问。它与rebar_utils:get_arch的返回值匹配,它由以下部分组成,用连字符分隔:
erlang:system_info(otp_release)
,例如"R15B02"
erlang:system_info(system_architecture)
。对于类 Unix 系统,这是由配置脚本确定的 CPU-vendor-OS 三元组,例如"i386-apple-darwin10.8.0"
或"x86_64-unknown-linux-gnu"
.erlang:system_info({wordsize, external})
.unix
或win32
. (返回元组的第一个元素os:type/0
)所以最终结果将类似于"R15B01-i386-apple-darwin10.8.0-32-unix"
or "R15B02-x86_64-unknown-linux-gnu-64-unix"
。