基于CDT源码制作一个最基本的C开发环境
前言
想起当初第一次扩展CDT时,看着庞大的源码仓库,不知如何下手,在一步步熟悉源码的过程中也踩了不少坑。本文作为介绍CDT入门的第一篇章,将介绍如何利用源码生成一个最基本的C开发IDE。
一、环境说明
- 本例程基于《导出Eclipse产品》一文中描述的开发环境和源码示例展开
- org.eclipse.cdt 源码仓库 ,本文基于cdt_10_5 分支
- 下载一种gcc环境,本文以mingw64为例(linux下使用gcc即可)
二、导入工程
导入工程
cdt的源码很庞大,构建一个最基础的ide,只需导入以下工程即可。后期基于cdt的定制及扩展,也基本上是基于以下工程展开的
- org.eclipse.cdt.core
- org.eclipse.cdt.core.native
- org.eclipse.cdt.core.win32 (或org.eclipse.cdt.core.linux)
- org.eclipse.cdt.core.win32.x86_64 (或org.eclipse.cdt.core.linux.x86_64)
- org.eclipse.cdt.debug.core
- org.eclipse.cdt.debug.ui
- org.eclipse.cdt.dsf
- org.eclipse.cdt.dsf.gdb
- org.eclipse.cdt.dsf.gdb.ui
- org.eclipse.cdt.dsf.ui
- org.eclipse.cdt.gdb
- org.eclipse.cdt.gdb.ui
- org.eclipse.cdt.launch
- org.eclipse.cdt.make.core
- org.eclipse.cdt.make.ui
- org.eclipse.cdt.managedbuilder.core
- org.eclipse.cdt.managedbuilder.gnu.ui
- org.eclipse.cdt.managedbuilder.ui
- org.eclipse.cdt.native.serial
- org.eclipse.cdt.ui
- org.eclipse.launchbar.core
- org.eclipse.launchbar.ui
- org.eclipse.tm.terminal.control
- org.eclipse.tools.templates.core
- org.eclipse.tools.templates.freemarker
- org.eclipse.tools.templates.ui
解决依赖
导入cdt的工程后,会发现工程编译不通过,有很多错误,莫慌,这是正常的,这是因为cdt依赖了很多第三方的一些插件。解决依赖有多种办法和技巧,接下来我们将通过自定义Target Platform的方式解决依赖的问题
定义Target Platform配置
在插件开发向导中找到新建Target Platform,在com.owner.xstudio.platform工程下新建Target Platform配置文件。加入如下配置,保存
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?pde version="3.8"?>
<target includeMode="feature" name="xstudio">
<locations>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
<repository location="https://download.eclipse.org/eclipse/updates/4.22"/>
<unit id="org.eclipse.platform.ide" version="4.22.0.I20211124-1800"/>
<unit id="org.eclipse.jdt.annotation" version="0.0.0"/>
<unit id="org.eclipse.ui.trace" version="0.0.0"/>
</location>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
<repository location="https://download.eclipse.org/tools/orbit/downloads/2021-12/"/>
<unit id="com.google.gson" version="2.8.8.v20211029-0838"/>
<unit id="com.sun.xml.bind" version="2.3.3.v20201118-1818"/>
<unit id="org.freemarker" version="2.3.22.v20160210-1233"/>
</location>
</locations>
</target>
保存后,PDE就会去fetch其中定义的plugin和feature。可能由于墙的原因,这个过程会较久甚至失败(VPN下很快)。fetch到所有的插件后,激活这个Target Platform,至此,当前工作空间下的所有插件的依赖都在此处进行配置。cdt的依赖很多,此处所描述的依赖足以满足当前导入的工程。完整的cdt的依赖,在cdt源码目录/releng/org.eclipse.cdt.target/cdt.target中
编译工程
至此,正常情况下工作空间不再报错。当激活的Target Platform有变化时,PDE会自动编译工作空间下的所有工程。为确保万无一失,手动clean所有的工程,重新进行编译。
三、集成插件
新建feature
新建一个feature工程,用来include cdt插件。配置如下
Overview 页
Include Plug-ins 页
包含如下插件
Dependencies 页
点击Compute按钮即可
添加feature
将新建的feature添加到 com.owner.xstudio.platform/xstudio.product 中即可
四、导出产品
至此,相关的plugin,feature,product都准备好了,正常导出product即可
五、成果展示
设置gcc环境变量
- MINGW_HOME=D:\compiler\msys64\mingw64
- MSYS_HOME=D:\compiler\msys64
cdt会根据这两个环境变量找到gcc和相关的头文件目录
运行
新建一个C工程
如果新建工程出错,参考出错解决
编译调试
如果找不到工具链,参考出错解决
六、总结
出错解决
导出后启动正常,新建工程时出错
eclipse 4.22版本的PDE导出product时编译的plugin貌似有问题(可能与Java11有关),其他版本未发现相似问题。
- 首先去产品的plugins下找到任意cdt插件,复制文件名中时间戳部分
- 手动导出工作空间中的所有cdt相关插件,注意时间戳改为刚才复制的时间戳
- 拷贝手动导出的cdt插件,全部粘贴覆盖到产品的plugins目录下即可
找不到gcc、gdb、make等工具链
出现这种问题,一般是环境变量的问题。如果系统环境变量未生效,可到Window->Preferences手动进行设置
参考资料
- 本案例源码下载
- 插件依赖,请参阅《关于插件依赖问题的解决办法和技巧》
- Target Platform,请参阅《啥是Target Platform》