C++构建与编译

编程入门 行业动态 更新时间:2024-10-09 09:18:55

C++构建与编译

C++构建与编译

C++构建

一般来讲,写完c++的源文件(src),就需要去编译为:

  1. 可执行文件
  2. 动态库/静态库

那么就遇到了几个问题:

  1. 编译的主机是什么
  2. 代码运行的目标平台是什么

主机

一般来讲工作的机器,Windows或者Linux,推荐Linux,问题少

目标平台

这个有Windows,Linux,Android,主要是Linux和Android

构造规则

  • CMakeLists:一般自己写CMakeLists,然后使用的工具是cmake(将规则转化为makefile,由make去构建),make(将makefile里面的规则提供给gcc,由gcc编译),gcc(不止可以处理c++,还可以处理C、C++、Objective-C、Fortran等),此外,g++一般用作c++的编译器,gcc用作c的编译器;所以源代码与真正的编译器之间(gcc g++)存在着cmake与make;默认是gcc编译器

  • Android.mk:地位跟CMakeLists相似,里面定义了哪些是源文件,哪些是依赖,写好之后,执行ndk-build进行编译;默认情况下,ndk-build使用GCC编译器,但是你也可以使用Clang编译器。在Android.mk文件中,你可以通过设置LOCAL_CLANG变量来指定使用Clang编译器,或者通过设置LOCAL_TOOLCHAIN变量来指定使用其他编译器。实际上也是使用了makefile

  • Android.bp:可以理解为升级版的Android.mk,是将Android.bp文件转换成ninja格文件来编译,Blueprint文件来描述构建规则,也就是使用Blueprint框架来解析,最终转换成Ninja文件,再有相应的编译器编译;最终,Ninja文件才是真正直接控制源码编译的工具

自己的理解
  • 如果是linux下的,直接使用cmake make即可编译出
  • 如果要编译Android,可以使用cmake make(此时需要有对应的ndk,并且在环境中指明),好像是cmake时就指定toolchain
  • 当然可以直接使用ndk-build对Android.mk文件进行处理,命令ndk-build会直接查找当前路径下的android.mk文件
  • 最后一种,就是借助Android源码(AOSP)进行编译,此时一般来说自己的项目只是作为一个组件,需要有一个Android.bp文件来告诉编译规则,命令为mm之类的

C++编译

以上是构建项目时用到的工具,具体的编译器都有默认值,也都可以手动指定
编译器

  • gcc
  • clang

一些层级关系

Linux——

  • cmake——可以生成makefile或者ninja,2种格式的构建文件
    • 处理对象:cmakelists
  • make,ninja:ninja更快
    • makefile,buleprint

安卓——

  • soong——生成ninja构建文件
    • 处理对象:android.bp
  • ndk-build
    • 处理对象:android.mk

编译器——

  • gcc,clang

参考

  • 理解Android.bp
  • Android.bp使用、与Android.mk的区别、对应关系、转换
  • Android编译系统中的Android.bp、Blueprint与Soong

更多推荐

C++构建与编译

本文发布于:2023-11-30 12:33:16,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1650142.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!