aboutsummaryrefslogtreecommitdiff
path: root/zh
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-05-22 23:38:18 +0800
committerruki <waruqi@gmail.com>2018-05-22 15:49:48 +0800
commit01ba5b49e0b62d41617cac425b636e5b0a812f13 (patch)
tree5c202d34eaecf67b12540cba91dda3fc39e46ed5 /zh
parent0de6b8970950b9d44c10be9a457463de623ebf08 (diff)
downloadxmake-docs-01ba5b49e0b62d41617cac425b636e5b0a812f13.tar.gz
xmake-docs-01ba5b49e0b62d41617cac425b636e5b0a812f13.zip
improve config header docs
Diffstat (limited to 'zh')
-rw-r--r--zh/manual.md39
1 files changed, 37 insertions, 2 deletions
diff --git a/zh/manual.md b/zh/manual.md
index 75b334e9..e1bc10c7 100644
--- a/zh/manual.md
+++ b/zh/manual.md
@@ -1453,13 +1453,24 @@ target("test")
如果不设置前缀,将会自动根据target名生成一个唯一字串。
+2.1.8 之后版本,支持针对每个局部配置文件,单独设置版本号,优先于全局的[set_version](#set_version),例如:
+
+```lua
+ set_config_header("$(buildir)/config.h", {prefix = "TB_CONFIG", version = "2.1.8", build = "%Y%m%d%H%M"})
+```
+
+###### 通过内置的检测规则生成配置
+
当这个target中通过下面的这些接口,对这个target添加了相关的选项依赖、包依赖、接口依赖后,如果某依赖被启用,那么对应的一些宏定义配置,会自动写入被设置的`config.h`文件中去。
* [add_options](#targetadd_options)
* [add_packages](#targetadd_packages)
+* [add_cfunc](#targetadd_cfunc)
* [add_cfuncs](#targetadd_cfuncs)
* [add_cxxfuncs](#targetadd_cxxfuncs)
+###### 定制化检测和生成配置头文件
+
这些接口,其实底层都用到了[option](#option)选项中的一些检测设置,例如:
```lua
@@ -1480,10 +1491,34 @@ target("test")
add_options("wchar")
```
-2.1.8 之后版本,支持针对每个局部配置文件,单独设置版本号,优先于全局的[set_version](#set_version),例如:
+甚至我们可以在`xmake.lua`中自己定义个function,针对option进行封装,提供更加定制化的检测和生成config.h的过程
+
+例如:这里有个需求,我们想批量检测一些头文件,如果存在则在config.h里面输出`HAVE_LIMITS_H`这样的宏开关,我们可以这么写
```lua
- set_config_header("$(buildir)/config.h", {prefix = "TB_CONFIG", version = "2.1.8", build = "%Y%m%d%H%M"})
+function add_checking_to_config(...)
+
+ -- 批量定义option检测规则,仅检测include文件
+ local options = {}
+ for _, header in ipairs({...}) do
+ local define = header:upper():gsub("[%./]", "_")
+ option(define)
+ add_cincludes(header)
+ add_defines_h("HAVE_" .. define) -- 生成 HAVE_LIMITS_H 这样的宏开关到config.h
+ option_end()
+ table.insert(options, define)
+ end
+
+ -- 定义个内置__config空目标,仅用于关联设置automatedconfig.h,以及对应的options检测规则
+ -- 因为set_config_header在全局设置,会影响所有target,对每个target都会检测生成一次宏开关
+ target("__config")
+ set_kind("phony")
+ set_config_header("includes/automatedconfig.h")
+ add_options(options)
+end
+
+-- 添加一些头文件检测
+add_checking_to_config("arpa/inet.h", "limits.h", "fcntl.h", "xxxx.h")
```
##### target:set_pcheader