浏览代码

ft: 添加port_env的说明和示例

master
SisMaker 2 年前
父节点
当前提交
eb98d0c019
共有 1 个文件被更改,包括 74 次插入72 次删除
  1. +74
    -72
      README.md

+ 74
- 72
README.md 查看文件

@ -17,77 +17,78 @@ default_env
After that eNpc should read your old rebar.config `port_specs` and `port_env` settings as expected (it is rebar2's port compiler after all...).
%% Supported configuration variables:
%%
%% * port_specs - Erlang list of tuples of the forms
%% {ArchRegex, TargetFile, Sources, Options}
%% {ArchRegex, TargetFile, Sources}
%% {TargetFile, Sources}
%%
%% Note that if you want to use any of the rebar3 variables
%% below you must MUST use a ${}-style to get the expansion
%% to work. e.g. to expand REBAR_DEPS_DIR, do something like:
%%
%% {port_specs, [{"priv/nif.so",
%% ["c_src/nif.c",
%% "${REBAR_DEPS_DIR}/foo/bar.c"]}]}.
%%
%% This is a _very_ good way to be able to use your code both
%% as a top level app and a dependency.
%%
%% CAVEAT! Not using {} is broken for the moment.
%%
%% * port_env - Erlang list of key/value pairs which will control
%% the environment when running the compiler and linker.
%% Variables set in the surrounding system shell are taken
%% into consideration when expanding port_env. Note that
%% for ERL_LDFLAGS, -lerl_interface is used for only those
%% Erlang/OTP versions where it exists (those prior to
%% version 23.0).
%%
%% By default, the following variables are defined:
%% CC - C compiler
%% CXX - C++ compiler
%% CFLAGS - C compiler
%% CXXFLAGS - C++ compiler
%% LDFLAGS - Link flags
%% ERL_CFLAGS - default -I paths for erts and ei
%% ERL_LDFLAGS - default -L and -lerl_interface -lei
%% DRV_CFLAGS - flags that will be used for compiling
%% DRV_LDFLAGS - flags that will be used for linking
%% EXE_CFLAGS - flags that will be used for compiling
%% EXE_LDFLAGS - flags that will be used for linking
%% ERL_EI_LIBDIR - ei library directory
%% DRV_CXX_TEMPLATE - C++ command template
%% DRV_CC_TEMPLATE - C command template
%% DRV_LINK_TEMPLATE - C Linker command template
%% DRV_LINK_CXX_TEMPLATE - C++ Linker command template
%% EXE_CXX_TEMPLATE - C++ command template
%% EXE_CC_TEMPLATE - C command template
%% EXE_LINK_TEMPLATE - C Linker command template
%% EXE_LINK_CXX_TEMPLATE - C++ Linker command template
%%
%% Note that if you wish to extend (vs. replace) these variables,
%% you MUST include a shell-style reference in your definition.
%% e.g. to extend CFLAGS, do something like:
%%
%% {port_env, [{"CFLAGS", "$CFLAGS -MyOtherOptions"}]}
%%
%% It is also possible to specify platform specific options
%% by specifying a triplet where the first string is a regex
%% that is checked against Erlang's system architecture string.
%% e.g. to specify a CFLAG that only applies to x86_64 on linux
%% do:
%%
%% {port_env, [{"x86_64.*-linux", "CFLAGS",
%% "$CFLAGS -X86Options"}]}
%%
%% Cross-arch environment variables to configure toolchain:
%% GET_ARCH to set the tool chain name to use
%% GET_ARCH_WORDSIZE (optional - to determine word size)"
%% word size is 32
%% GET_ARCH_VSN (optional - "
%% l version of CC/CXX is requested),
###
```
Supported configuration variables:
* port_specs - Erlang list of tuples of the forms
{ArchRegex, TargetFile, Sources, Options}
{ArchRegex, TargetFile, Sources}
{TargetFile, Sources}
Note that if you want to use any of the rebar3 variables
below you must MUST use a ${}-style to get the expansion
to work. e.g. to expand REBAR_DEPS_DIR, do something like:
{port_specs, [{"priv/nif.so",
["c_src/nif.c",
"${REBAR_DEPS_DIR}/foo/bar.c"]}]}.
This is a _very_ good way to be able to use your code both
as a top level app and a dependency.
CAVEAT! Not using {} is broken for the moment.
* port_env - Erlang list of key/value pairs which will control
the environment when running the compiler and linker.
Variables set in the surrounding system shell are taken
into consideration when expanding port_env. Note that
for ERL_LDFLAGS, -lerl_interface is used for only those
Erlang/OTP versions where it exists (those prior to
version 23.0).
By default, the following variables are defined:
CC - C compiler
CXX - C++ compiler
CFLAGS - C compiler
CXXFLAGS - C++ compiler
LDFLAGS - Link flags
ERL_CFLAGS - default -I paths for erts and ei
ERL_LDFLAGS - default -L and -lerl_interface -lei
DRV_CFLAGS - flags that will be used for compiling
DRV_LDFLAGS - flags that will be used for linking
EXE_CFLAGS - flags that will be used for compiling
EXE_LDFLAGS - flags that will be used for linking
ERL_EI_LIBDIR - ei library directory
DRV_CXX_TEMPLATE - C++ command template
DRV_CC_TEMPLATE - C command template
DRV_LINK_TEMPLATE - C Linker command template
DRV_LINK_CXX_TEMPLATE - C++ Linker command template
EXE_CXX_TEMPLATE - C++ command template
EXE_CC_TEMPLATE - C command template
EXE_LINK_TEMPLATE - C Linker command template
EXE_LINK_CXX_TEMPLATE - C++ Linker command template
Note that if you wish to extend (vs. replace) these variables,
you MUST include a shell-style reference in your definition.
e.g. to extend CFLAGS, do something like:
{port_env, [{"CFLAGS", "$CFLAGS -MyOtherOptions"}]}
It is also possible to specify platform specific options
by specifying a triplet where the first string is a regex
that is checked against Erlang's system architecture string.
e.g. to specify a CFLAG that only applies to x86_64 on linux
do:
{port_env, [{"x86_64.*-linux", "CFLAGS",
"$CFLAGS -X86Options"}]}
Cross-arch environment variables to configure toolchain:
GET_ARCH to set the tool chain name to use
GET_ARCH_WORDSIZE (optional - to determine word size)"
word size is 32
GET_ARCH_VSN (optional - "
l version of CC/CXX is requested),
{port_specs, [
@ -119,4 +120,5 @@ After that eNpc should read your old rebar.config `port_specs` and `port_env` se
{"darwin10.*-32$", "LDFLAGS", "-arch i386"},
{"win32", "CXXFLAGS", "$CXXFLAGS /O2 /DNDEBUG"}
]}.
]}.
```

正在加载...
取消
保存