awtk/docs/app_helper_usage.md
2022-11-29 17:57:20 +08:00

101 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 利用 app_helper 编写 SConstruct
AWTK 项目中有 SConstruct 文件,该文件是 Scons 的编译脚本。当开发者需要在程序中使用依赖库或者进行自定义预处理时,需要遵循 Python 语法编写 SConstruct 文件,这是一件繁琐的事情。
为简化 SConstruct 的编写AWTK 把一些公共功能提取到 awtk/scripts/app_helper_base.py 中,并且在项目目录下的 scripts/app_helper.py 中导入 app_helper_base.py让开发者可直接在项目的 SConstruct 文件中调用这些函数。
## 1 相关函数
app_helper.py 提供了下表中的函数,具体用法请参考 awtk/docs/app_helper_usage.md。
| 函数名称 | 说明 |
| ---------------------- | ---------------------------------- |
| add_deps | 增加依赖的第三方库 |
| add_libs | 增加依赖的库 |
| set_dll_def | 设置动态库的 def 文件名 |
| add_cpppath | 增加头文件搜索路径 |
| add_libpath | 增加库的搜索路径 |
| add_cxxflags | 增加C++预处理参数 |
| add_ccflags | 增加C 预处理参数 |
| add_linkflags | 增加链接参数 |
| add_platform_libs | 增加特定平台的需要的库 |
| add_platform_cpppath | 增加特定平台的需要的头文件搜索路径 |
| add_platform_libpath | 增加特定平台的需要的库搜索路径 |
| add_platform_ccflags | 增加特定平台的需要的C 预处理参数 |
| add_platform_cxxflags | 增加特定平台的需要的C++预处理参数 |
| add_platform_linkflags | 增加特定平台的需要的链接参数 |
> 上表中的函数实现在 awtk/scripts/app_helper_base.py 中。
## 2 示例
使用 app_helper.py 首先需要在SConstruct中导入它然后调用 Helper 函数得到helper对象最后使用 helper 对象调用上一节的函数。
例如,在项目中使用 SQLite 软件库SQL数据库引擎静态链接库以及头文件的目录结构如下
```bash
项目目录/
|-- 3rd/sqlite3/sqlite3.h
|-- lib/sqlite3.lib
```
在项目目录下的 SConstruct 文件中调用 add_libs() 函数增加 sqlite3.lib 依赖库,并且调用 add_cpppath() 函数增加该依赖库头文件的搜索路径,代码如下:
```python
import os
import scripts.app_helper as app
helper = app.Helper(ARGUMENTS);
helper.add_libs(['sqlite3']).add_cpppath([os.path.join(helper.APP_ROOT, '3rd')]).call(DefaultEnvironment)
SConscript(['src/SConscript', '3rd/sqlite3/SConscript'])
```
需要注意的是:
1. 本示例中将静态链接库 sqlite3.lib 放在项目目录的 lib 文件夹下AWTK 默认将该路径添加到库的搜索路径中。如果开发者将静态链接库放在其他路径,则还需要调用 add_libpath() 函数将该路径添加到库的搜索路径中。
2. helper 支持链式调用call 函数需要放到最后。
## 3 特殊函数
调用 app_helper.py 提供的函数,通常只需要传入文件或目录对应的路径,但有个别函数的还需要传入其他参数,包括 add_deps 和 add_platform_ 开头的所有函数,下面举例说明。
1add_deps() 函数原型如下:
```python
def add_deps(self, DEPENDS_LIBS):
```
调用 add_deps() 函数增加依赖的第三方库,代码如下:
```python
DEPENDS_LIBS = [
{
"root" : '../awtk-restful-httpd',
'shared_libs': ['httpd'],
'static_libs': []
}
]
helper.add_deps(DEPENDS_LIBS)
```
"root"为第三方库的路径,支持相对路径和绝对路径;"shared_libs"为动态链接库;"static_libs"为静态链接库。
2add_platform_libs() 函数原型如下:
```python
def add_platform_libs(self, plat, PLATFORM_LIBS)
```
调用 add_platform_libs() 函数增加 Windows 平台下的 ws2_32.lib 库,代码如下:
```python
helper.add_platform_libs('Windows', ['ws2_32'])
```
plat参数为特定平台取值如下Windows、Linux 和 Darwin分别表示 Windows 平台、Linux 平台和 macOS 平台。PLATFORM_LIBS 参数为库的名称。其他 add_platform_ 开头的函数用法也类似。
> 1. [awtk-hello](https://github.com/zlgopen/awtk-hello/blob/master/SConstruct)
> 2. [awtk-mvvm-c-hello](https://github.com/zlgopen/awtk-mvvm-c-hello/blob/master/SConstruct)
> 3. [awtk-widget-table-view](https://github.com/zlgopen/awtk-widget-table-view/blob/master/SConstruct)