在Ubuntu中用CLion来管理LLVM/Clang工程

您所在的位置:网站首页 安装llvm-debug 在Ubuntu中用CLion来管理LLVM/Clang工程

在Ubuntu中用CLion来管理LLVM/Clang工程

2023-09-06 18:06| 来源: 网络整理| 查看: 265

前言1、安装配置CLion1.1、换源1.2、下载安装CLion1.3 、配置C/C++编译环境 2、编译LLVM/Clang2.1、获取llvm-project2.2、LLVM编译环境配置2.3、编译LLVM/Clang 3、总结

前言

LLVM作为一个大型的编译套件,各种类继承关系,函数调用等十分繁杂,在Ubuntu下为了更好的,更方便的阅读LLVM套件的源码,希望通过CLion这个优秀的ide来管理这个工程。以下详细的记录了我在Ubuntu18.04.1中安装CLion和编译LLVM/Clang的步骤。对于初学者十分友好!!!

1、安装配置CLion 1.1、换源

目前我的系统仍然是刚刚安装的Ubuntu,先换上阿里源(以方便后续快速下载安装依赖包)

# 1.先用root权限打开sourses.list文件 $ sudo gedit /etc/apt/sources.list # 2.将文件中原有的内容删除,复制粘贴下面阿里源,保存退出 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse # 3.在shell中输入以下指令更新 $ sudo apt update && sudo apt upgrade 1.2、下载安装CLion

在CLion官网获取CLion的安装包,此处我安装的是2019.3.6版本 Version 2019.3 通过Ubuntu中火狐浏览器下载的安装包应该在用户的Download目录中,我这里将其移动到用户目录中,并通过以下命令解压:

$ tar -zxvf CLion-2019.3.6.tar.gz

此时,用户目录会有以下两个文件: clion解压后文件 在当前用户目录下输入以下命令即可展开CLion的安装:

$ cd clion-2019.3.6/bin/ $ ./clion.sh

首先会弹出以下要你选择配置文件的窗口,选择Do not import settings,然后点击OK即可。 然后只需要一直continue即可,直到出现以下界面,在以下界面For all users处打上勾勾,点击start,便完成了CLion的安装(CLion是一个收费的ide,但是可以先试用30天,自己可以想办法激活哦!)。

1.3 、配置C/C++编译环境

在安装好CLion后打开CLion,如下图: 这里新建一个工程,点击New Project,跳转如下: 这里就创建一个C++ Executable,这在CLion里面会生成一个CMake工程,点击creat,跳转如下: 可见在生成的工程里面build(那个锤子按钮)和run(播放按钮)都是灰色的,下面的CMake栏里面也有报CMake Error,这是因为CLion的C/C++编译toolchains还不完备(因为Ubuntu是默认不安装C/C++编译套件的)。先关闭CLion,打开命令行,输入如下命令安装C/C++编译套件:

# 我们在ubuntu上编译程序,默认是有gcc的,但是没有g++。如果自己来安装g++也可以,不过它涉及到一些依赖库,有点麻烦。有个叫build-essential的包,里面包含了很多开发必要的软件包,很全,很方便。 $ sudo apt-get install build-essential

这时候重新打开CLion,会发现刚刚那个test工程可以build和run了(咦,我们好像没有安装CMake,应该是clion里面已经集成CMake)。我们可以通过点击File->Settings->Build,Execution,Deployment->toolchain看一下,可以看到CLion已经自动找到了刚刚安装的gcc,g++和make,如图: 到此,CLion的构建环境搭建好了,接下来通过CLion来编译LLVM/Clang。

2、编译LLVM/Clang 2.1、获取llvm-project

进入LLVM下载界面,我目前的稳定版本更新到11.0.0,如下图: 可以看到在Sources下有很多下载链接,如果你只需要LLVM和Clang的话,可以只下载第二个(LLVM)和第三个(Clang)的源码,因为我后续要用到clang-tools-extra中的clang-tidy作静态分析,而且还有可能会用到其他更多的外部项目,所以这里下载第一个llvm-project monorepo source code,里面包含其下所有的LLVM套件。 将下载好的文件放入用户目录,用以下命令对其解压:

$ tar xvJf llvm-project-11.0.0.tar.xz

得到llvm-project-11.0.0文件夹,进入其中,其目录树如下:

. ├── clang ├── clang-tools-extra ├── compiler-rt ├── CONTRIBUTING.md ├── debuginfo-tests ├── flang ├── libc ├── libclc ├── libcxx ├── libcxxabi ├── libunwind ├── lld ├── lldb ├── llvm ├── mlir ├── openmp ├── parallel-libs ├── polly ├── pstl ├── README.md └── utils 2.2、LLVM编译环境配置

编译LLVM需要很多的依赖包,官网的要求如下: 我们这里输入以下命令依次安装:

# GCC套件和Make前面装clion的时候已经装好了 # 装zlib $ sudo apt-get install zlib1g zlib1g-dev # 装python $ sudo apt-get install python3 python # 再装个git,可以配合clion来管理源代码 $ sudo apt-get install git

这样,依赖包就装好了!下面进入更重要的环节!也是我踩过最多坑的地方!! 编译Debug版的LLVM套件不仅需要很大的内存,而且编译得到的文件会消耗很多磁盘空间!! 所以首先保证你的虚拟机的磁盘空间最好在100G以上! 接下来就是内存了,我自己一开始仅仅开了8G内存,在链接clang的时候直接内存爆掉了。那么怎么处理内存的问题呢,首先,我将虚拟机的内存开到了12G(物理机是16G),然后挂载了一个8G的swap分区!根据经验,你的内存+swap分区大小最好>16G!! 根据以下命令,扩大swap分区大小:

# 1. 创建8G的空文件,以备挂载为swap分区(该过程可能需要半分钟) $ sudo dd if=/dev/zero of=/tmp/swap1 bs=1M count=8192 # 2. 将/tmp/swap1格式化为swap分区,重启后自动没了 $ sudo mkswap /tmp/swap1 # 3. 挂载 $ sudo swapon /tmp/swap1 # 4. 用free指令看一下交换分区大小 $ free -h # 5. 显示如下,可见在我系统中内存+swap分区大小已经有了20G左右 total used free shared buff/cache available Mem: 11G 1.4G 136M 18M 10G 9G Swap: 9G 0B 9G

至此,编译环境都准备好了,接下来在CLion中编译LLVM/Clang!!!

2.3、编译LLVM/Clang

首先,在前文所说的llvm-project-11.0.0目录下创建build目录,作为构建的目录:

$ cd ~/llvm-project-11.0.0/ $ mkdir build

然后打开CLion,点击Open File or Project,然后选择llvm源码文件夹,点击OK打开,如下图: 这时候会进入CLion,并且CLion会根据llvm文件夹下的CMakeLists.txt自动执行CMake构建出一个目录cmake-build-debug,如下图: 但这不是我们想要的,我们需要自己配置CMake的参数来进行生成。为此,进行接下来的操作:首先点击Tools->CMake->Chang Project Root,将其改为与llvm同级目录的build文件夹;然后点击File->Settings->Build, Execution, Deployment->CMake进入CMake的配置窗口;在CMake配置窗口内,将Generate Path改为刚刚那个build的文件夹,同时将CMake options里面的内容添加以下选项:

点击OK,配置完成! 这时,CLion又会自动执行CMake生成项目,生成目录如下(没有把llvm同级文件夹下其他不需要的文件夹包括进来): 现在,你可以删除刚刚自动生成的cmake-build-debug的目录,并且进行LLVM/Clang的构建了! 开始编译:点击Build->Build All in ‘Debug’,则开始正式编译项目了,编译生成的可执行文件均存放在build/bin/目录下 历经4.5h,终于编译成功了,这时候可以去进入build/bin/目录下运行各种LLVM套件中的各种工具啦!!!

3、总结

编译LLVM的Debug版本需要特别大的内存,我在实践中还是编译的RelWithDebInfo版本,对于阅读源码调试源码暂时够用了。以下是我的CMake参数配置: 在用CMake生成构建文件时,有一些常用的CMake选项如下:

CMAKE_BUILD_TYPE:指定构建的类型,包括Debug, Release, RelWithDebInfo和MinSizeRel四种版本,默认是Debug。CMAKE_INSTALL_PREFIX:指定构建时的安装目录。LLVM_TARGETS_TO_BUILD:指定构建的目标架构。包括:AArch64, AMDGPU, ARM, BPF, Hexagon, Mips, MSP430, NVPTX, PowerPC, Sparc, SystemZ, X86, XCore。默认全开,也可以用分号隔开来自己指定需要生成的架构。LLVM_ENABLE_PROJECTS:一个分号分隔的列表,可以选择要额外构建的其他LLVM子项目。(只有在使用并排的项目布局时才有效,就是上文提到的那种目录树布局)。默认列表为空。可以包括:clang, clang-tools-extra, libcxx, libcxxabi, libunwind, lldb, compiler-rt, lld, polly, debuginfo-tests。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3