如何编译指定模块

深开鸿_徐仕强

沙发 发表于 2024-6-21 17:56:51
以rk3568为例,
./build.sh --product-name rk3568 --no-prebuilt-sdk  --build-target XXX  --deps-guard=false
./prebuilts/build-tools/linux-x86/bin/ninja -C out/rk3568 / XXX  -j12 -w dupbuild=warn  
XXX就是你要编译的模块

shihao-y

发表于 2024-8-8 14:26  IP属地: 广东省广州市

回复 深开鸿_徐仕强: 你好,请问一下“build-target”一般需要怎么选择?举例来说,如果我修改了//foundation/communication/dsoftbus/sdk路径下的部分代码,我怎么确定自己需要重新编译的部分是什么呢?

shihao-y

发表于 2024-8-13 17:56  IP属地: 广东省广州市

回复 shihao-y: 自问自答一下吧。
参考该文章https://forums.openharmony.cn/fo ... &extra=page%3D2中的内容,可以知道一般是去BUILD.gn文件中寻找。

【2 条回复】

lakewater

板凳 发表于 2024-6-24 10:53:20
贴一个本地编译的技巧,希望有些帮助:

1、安装ccache:用来缓存编译过的.o文件等
       export CCACHE_NOHASHDIR="true" && export CCACHE_SLOPPINESS="include_file_ctime" :设置ccache在做hash的时候不hash路径、不检查文    件的change time
   2、--fast-rebuild:直接从ninja开始编译,跳过前面的产品配置解析和gn解析,需要在不修改gn的时候可以使用
   3、--gn-args enable_notice_collection=false:取消收集开源notice的过程,建议加上
   4、--disable-package-image:取消最后的image压缩成tar包的动作
   5、--build-only-gn:重新执行Preloader、loader、gn,不进行最后的编译动作
   6、--build-target:可以单独指定某个编译目标,在out/rk3568下面执行ninja -t targets | grep "xxx"
   7、--gn-args enable_lto_O0=true:在链接的时候会减弱优化的等级,建议在只考虑编译是否成功的时候使用(会影响最后的so的性能和rom大小)
   8、--gn-args archive_ndk=false:编译sdk的时候不执行输出压缩包的动作
   9、尽量不删除out,走增量编译
  10、export NO_DEVTOOL=1 && ./build.sh xxx: 取消webpack打包过程中生成sourcemap的动作

  11、--disable-post-build:取消Postbuild过程,最后的ninja trace解析、每个子系统的的rom size统计等动作会没有

  12、--gn-args skip_generate_module_list_file=true:跳过为test 生成记录文件的过程,节省gn解析的过程,只要不跑tdd测试用例,这个参数都可以加上,编译tdd用例也没关系

  13、在不编译image的时候:-T packages --gn-args skip_gen_module_info=true,去掉gn阶段module info的生成
  14、在不编译test用例的时候可以加上--load-test-config=false,来去掉gn阶段test相关编译目标的解析
  15、在不修改编译目标的external_deps且out输出目录不删除的情况,可以尝试使用--gn-args ohos_skip_parse_external_deps=true来缩短增量构建的gn解析时间
  16、--build-only-load:重新执行Preloader、loader,不进行最后的gn, ninja动作
共4 条回复,点击查看

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部