summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorruki <[email protected]>2017-04-01 20:25:37 +0800
committerruki <[email protected]>2017-04-01 20:25:37 +0800
commit6a7e46573cda90e77859bb3c8541a6608c87cfea (patch)
tree7d742a410e8232cb9d44ef7d45fbef0ac4fa6c56 /docs
parent423c16ccf6a67a92ffd943fb6e5d06d66a04543d (diff)
modify docs
Diffstat (limited to 'docs')
-rw-r--r--docs/manual.md37
-rwxr-xr-xdocs/zh/manual.md37
2 files changed, 70 insertions, 4 deletions
diff --git a/docs/manual.md b/docs/manual.md
index 201d0ab41..2c626a464 100644
--- a/docs/manual.md
+++ b/docs/manual.md
@@ -470,6 +470,7 @@ target("test2")
| [add_files](#targetadd_files) | 添加源代码文件 | >= 1.0.1 |
| [add_headers](#targetadd_headers) | 添加安装的头文件 | >= 1.0.1 |
| [add_linkdirs](#targetadd_linkdirs) | 添加链接库搜索目录 | >= 1.0.1 |
+| [add_rpathdirs](#targetadd_rpathdirs) | 添加运行时候动态链接库搜索目录 | >= 2.1.3 |
| [add_includedirs](#targetadd_includedirs) | 添加头文件搜索目录 | >= 1.0.1 |
| [add_defines](#targetadd_defines) | 添加宏定义 | >= 1.0.1 |
| [add_undefines](#targetadd_undefines) | 取消宏定义 | >= 1.0.1 |
@@ -1341,12 +1342,39 @@ target("test")
add_linkdirs("$(buildir)/lib")
```
+此接口相当于gcc的`-Lxxx`链接选项。
+
一般他是与[add_links](#targetadd_links)配合使用的,当然也可以直接通过[add_ldflags](#targetadd_ldflags)或者[add_shflags](#targetadd_shflags)接口来添加,也是可以的。
<p class="tip">
如果不想在工程中写死,可以通过:`xmake f --linkdirs=xxx`或者`xmake f --ldflags="-L/xxx"`的方式来设置,当然这种手动设置的目录搜索优先级更高。
</p>
+##### target:add_rpathdirs
+
+###### 添加程序运行时动态库的加载搜索目录
+
+通过[add_linkdirs](#targetadd_linkdirs)设置动态库的链接搜索目录后,程序被正常链接,但是在linux平台想要正常运行编译后的程序,会报加载动态库失败。
+
+因为没找到动态库的加载目录,想要正常运行依赖动态库的程序,需要设置`LD_LIBRARY_PATH`环境变量,指定需要加载的动态库目录。
+
+但是这种方式是全局的,影响太广,更好的方式是通过`-rpath=xxx`的链接器选项,在链接程序的时候设置好需要加载的动态库搜索路径,而xmake对其进行了封装,通过`add_rpathdirs`更好的处理跨平台问题。
+
+具体使用如下:
+
+```lua
+target("test")
+ set_kind("binary")
+ add_linkdirs("$(buildir)/lib")
+ add_rpathdirs("$(buildir)/lib")
+```
+
+只需要在链接的时候,在设置下rpath目录就好了,虽然也可以通过`add_ldflags("-Wl,-rpath=xxx")`达到相同的目的,但是这个接口更加通用。
+
+内部会对不同平台进行处理,像在macOS下,是不需要`-rpath`设置的,也是可以正常加载运行程序,因此针对这个平台,xmake内部会直接忽略器设置,避免链接报错。
+
+而在为dlang程序进行动态库链接时,xmake会自动处理成`-L-rpath=xxx`来传入dlang的链接器,这样就避免了直接使用`add_ldflags`需要自己判断和处理不同平台和编译器问题。
+
##### target:add_includedirs
###### 添加头文件搜索目录
@@ -1781,6 +1809,7 @@ option("test2")
| [add_rbindings](#optionadd_rbindings) | 添加逆向关联选项,同步启用和禁用 | >= 2.0.1 |
| [add_links](#optionadd_links) | 添加链接库检测 | >= 1.0.1 |
| [add_linkdirs](#optionadd_linkdirs) | 添加链接库检测需要的搜索目录 | >= 1.0.1 |
+| [add_rpathdirs](#optionadd_rpathdirs) | 添加运行时候动态链接库搜索目录 | >= 2.1.3 |
| [add_cincludes](#optionadd_cincludes) | 添加c头文件检测 | >= 1.0.1 |
| [add_cxxincludes](#optionadd_cxxincludes) | 添加c++头文件检测 | >= 1.0.1 |
| [add_ctypes](#optionadd_ctypes) | 添加c类型检测 | >= 1.0.1 |
@@ -1799,8 +1828,6 @@ option("test2")
| [set_warnings](#targetset_warnings) | 设置警告级别 | >= 1.0.1 |
| [set_optimize](#targetset_optimize) | 设置优化级别 | >= 1.0.1 |
| [set_languages](#targetset_languages) | 设置代码语言标准 | >= 1.0.1 |
-| [add_links](#targetadd_links) | 添加链接库名 | >= 1.0.1 |
-| [add_linkdirs](#targetadd_linkdirs) | 添加链接库搜索目录 | >= 1.0.1 |
| [add_includedirs](#targetadd_includedirs) | 添加头文件搜索目录 | >= 1.0.1 |
| [add_defines](#targetadd_defines) | 添加宏定义 | >= 1.0.1 |
| [add_undefines](#targetadd_undefines) | 取消宏定义 | >= 1.0.1 |
@@ -2102,6 +2129,12 @@ target("test")
这个是可选的,一般系统库不需要加这个,也能检测通过,如果确实没找到,可以自己追加搜索目录,提高检测通过率。具体使用见:[add_links](#optionadd_links)
+##### option:add_rpathdirs
+
+###### 添加程序运行时动态库的加载搜索目录
+
+在选项通过检测后,会自动添加到对应的target上去,具体使用见:[target.add_rpathdirs](#targetadd_rpathdirs)。
+
##### option:add_cincludes
###### 添加c头文件检测
diff --git a/docs/zh/manual.md b/docs/zh/manual.md
index 17d179f54..499a6a31e 100755
--- a/docs/zh/manual.md
+++ b/docs/zh/manual.md
@@ -472,6 +472,7 @@ target("test2")
| [add_files](#targetadd_files) | 添加源代码文件 | >= 1.0.1 |
| [add_headers](#targetadd_headers) | 添加安装的头文件 | >= 1.0.1 |
| [add_linkdirs](#targetadd_linkdirs) | 添加链接库搜索目录 | >= 1.0.1 |
+| [add_rpathdirs](#targetadd_rpathdirs) | 添加运行时候动态链接库搜索目录 | >= 2.1.3 |
| [add_includedirs](#targetadd_includedirs) | 添加头文件搜索目录 | >= 1.0.1 |
| [add_defines](#targetadd_defines) | 添加宏定义 | >= 1.0.1 |
| [add_undefines](#targetadd_undefines) | 取消宏定义 | >= 1.0.1 |
@@ -1344,12 +1345,39 @@ target("test")
add_linkdirs("$(buildir)/lib")
```
+此接口相当于gcc的`-Lxxx`链接选项。
+
一般他是与[add_links](#targetadd_links)配合使用的,当然也可以直接通过[add_ldflags](#targetadd_ldflags)或者[add_shflags](#targetadd_shflags)接口来添加,也是可以的。
<p class="tip">
如果不想在工程中写死,可以通过:`xmake f --linkdirs=xxx`或者`xmake f --ldflags="-L/xxx"`的方式来设置,当然这种手动设置的目录搜索优先级更高。
</p>
+##### target:add_rpathdirs
+
+###### 添加程序运行时动态库的加载搜索目录
+
+通过[add_linkdirs](#targetadd_linkdirs)设置动态库的链接搜索目录后,程序被正常链接,但是在linux平台想要正常运行编译后的程序,会报加载动态库失败。
+
+因为没找到动态库的加载目录,想要正常运行依赖动态库的程序,需要设置`LD_LIBRARY_PATH`环境变量,指定需要加载的动态库目录。
+
+但是这种方式是全局的,影响太广,更好的方式是通过`-rpath=xxx`的链接器选项,在链接程序的时候设置好需要加载的动态库搜索路径,而xmake对其进行了封装,通过`add_rpathdirs`更好的处理跨平台问题。
+
+具体使用如下:
+
+```lua
+target("test")
+ set_kind("binary")
+ add_linkdirs("$(buildir)/lib")
+ add_rpathdirs("$(buildir)/lib")
+```
+
+只需要在链接的时候,在设置下rpath目录就好了,虽然也可以通过`add_ldflags("-Wl,-rpath=xxx")`达到相同的目的,但是这个接口更加通用。
+
+内部会对不同平台进行处理,像在macOS下,是不需要`-rpath`设置的,也是可以正常加载运行程序,因此针对这个平台,xmake内部会直接忽略器设置,避免链接报错。
+
+而在为dlang程序进行动态库链接时,xmake会自动处理成`-L-rpath=xxx`来传入dlang的链接器,这样就避免了直接使用`add_ldflags`需要自己判断和处理不同平台和编译器问题。
+
##### target:add_includedirs
###### 添加头文件搜索目录
@@ -1784,6 +1812,7 @@ option("test2")
| [add_rbindings](#optionadd_rbindings) | 添加逆向关联选项,同步启用和禁用 | >= 2.0.1 |
| [add_links](#optionadd_links) | 添加链接库检测 | >= 1.0.1 |
| [add_linkdirs](#optionadd_linkdirs) | 添加链接库检测需要的搜索目录 | >= 1.0.1 |
+| [add_rpathdirs](#optionadd_rpathdirs) | 添加运行时候动态链接库搜索目录 | >= 2.1.3 |
| [add_cincludes](#optionadd_cincludes) | 添加c头文件检测 | >= 1.0.1 |
| [add_cxxincludes](#optionadd_cxxincludes) | 添加c++头文件检测 | >= 1.0.1 |
| [add_ctypes](#optionadd_ctypes) | 添加c类型检测 | >= 1.0.1 |
@@ -1802,8 +1831,6 @@ option("test2")
| [set_warnings](#targetset_warnings) | 设置警告级别 | >= 1.0.1 |
| [set_optimize](#targetset_optimize) | 设置优化级别 | >= 1.0.1 |
| [set_languages](#targetset_languages) | 设置代码语言标准 | >= 1.0.1 |
-| [add_links](#targetadd_links) | 添加链接库名 | >= 1.0.1 |
-| [add_linkdirs](#targetadd_linkdirs) | 添加链接库搜索目录 | >= 1.0.1 |
| [add_includedirs](#targetadd_includedirs) | 添加头文件搜索目录 | >= 1.0.1 |
| [add_defines](#targetadd_defines) | 添加宏定义 | >= 1.0.1 |
| [add_undefines](#targetadd_undefines) | 取消宏定义 | >= 1.0.1 |
@@ -2105,6 +2132,12 @@ target("test")
这个是可选的,一般系统库不需要加这个,也能检测通过,如果确实没找到,可以自己追加搜索目录,提高检测通过率。具体使用见:[add_links](#optionadd_links)
+##### option:add_rpathdirs
+
+###### 添加程序运行时动态库的加载搜索目录
+
+在选项通过检测后,会自动添加到对应的target上去,具体使用见:[target.add_rpathdirs](#targetadd_rpathdirs)。
+
##### option:add_cincludes
###### 添加c头文件检测