跳过特定操作系统的端口编译?

时间:2012-09-19 08:52:04

标签: compilation erlang rebar

我有一个基于Rebar的Erlang应用程序,用于构建端口程序。此端口程序是特定于Linux的,因此在Mac OS上编译失败。但是,我希望Rebar在Mac OS上构建时跳过端口程序。我怎么能这样做?

rebar.config中的当前规范如下所示:

{port_specs, [{"priv/my_port", ["c_src/foo.c", "c_src/bar.c"]}]}.

1 个答案:

答案 0 :(得分:1)

作为documented in comments in rebar_port_compiler.erlport_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)返回的OTP版本,例如"R15B02"
  • erlang:system_info(system_architecture)返回的系统架构。对于类Unix系统,这是由配置脚本确定的CPU-vendor-OS三元组,例如"i386-apple-darwin10.8.0""x86_64-unknown-linux-gnu"
  • 模拟器字大小,32或64,基于erlang:system_info({wordsize, external})的返回值。
  • OS系列,= unix =或= win32 =。 (由os:type/0返回的元组的第一个元素)

因此,最终结果将类似于"R15B01-i386-apple-darwin10.8.0-32-unix""R15B02-x86_64-unknown-linux-gnu-64-unix"