• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# cflags系列参数使用指导
2
3## cflags系列参数列表
4| 支持的参数    | 说明                      |
5|----------|-------------------------|
6| cflags   | 用于指定工具链编译参数,对c、c++源码均生效 |
7| cflags_c | 用于指定工具链编译参数,仅c源码均生效 |
8| cflags_cc | 用于指定工具链编译参数,仅c++源码均生效 |
9
10## 支持使用cflags系列参数的模板
11| 支持cflags系列参数的模板 |
12|---------------------|
13| ohos_executable     |
14| ohos_shared_library |
15| ohos_static_library |
16| ohos_source_set     |
17
18
19## 编译参数覆盖规则
20编译参数按配置的先后顺序,后配置的编译参数会覆盖先配置的编译参数
21
22### cflags与cflags_c、cflags_cc
23使用cflags_c、cflags_cc配置的编译参数,默认添加到cflags配置的编译参数之后,因此,使用cflags_c、cflags_cc配置的编译参数会覆盖使用cflags配置的编译参数,示例如下:
24```
25ohos_shared_library("example") {
26  ...
27  cflags = [ "-fxxx" ]
28  cflags_cc = [ "-fno-xxx" ]    # -fno-xxx会覆盖-fxxx,使-fxxx失效
29  ...
30}
31```
32
33### 编译框架与各业务模块
34>  **说明:以cflags为例,cflags_c、cflags_cc规则同cflags**
35
36OpenHarmony编译框架默认全局配置的编译参数与各业务模块自定义的编译参数之间的覆盖规则:
37- 若业务模块自定义的cflags配置在模板中,该编译参数会被编译框架的默认编译参数覆盖,示例如下:
38```
39ohos_shared_library("example") {
40  ...
41  cflags = [ "-fxxx" ]
42  ...
43}
44```
45
46- 若业务模块自定义的cflags配置在configs中,该编译参数会覆盖编译框架的默认参数,示例如下:
47```
48config("example_config") {
49  cflags = [ "-fxxx" ]
50}
51
52ohos_shared_library("example") {
53  configs = [ ":example_config" ]
54}
55```
56
57## 如何覆盖编译框架默认编译参数
58- 若要覆盖编译框架默认配置的cflags参数,参考[编译参数覆盖规则](#编译参数覆盖规则):
59    1. 可以直接使用cflags_c、cflags_cc进行覆盖
60    2. 可以使用configs + cflags进行覆盖
61- 若要覆盖编译框架默认配置的cflags_c、cflags_cc参数,参考[编译参数覆盖规则](#编译参数覆盖规则):
62    1. 可以使用configs + cflags_c、cflags_cc进行覆盖
63
64## 如何查看添加的编译参数
65以rk3568编译为例,在`out/rk3568/obj`目录下,查找对应编译目标生成的`.ninja`文件,如编译目标example会生成example.ninja,在example.ninja中可以查看配置的编译参数