使用Emacs开发Unreal C++项目

C++开发环境 : clangd + lsp-mode + company

想在Emacs进行Unreal C++编程时,因为Unreal中Engine的代码特别大,50+G,而且使用了很多宏,clangd无法直接解析出来,又辗转于gtags,ctags,但tags文件生成慢,对于宏的展开也没有办法。

后来使用VSCode编译Unreal项目时,意外发现它使用的有和compile_commands.json类似的文件,而这些文件其实也是Unreal工具提供的。

我把这些文件用作compile_commands.json,lsp是能够解析的。

现在就是可以在cpp文件进行定义和引用的查找,但在h文件不行。虽然听起来像半吊子,但是对于了解Unreal项目的人来说,应该知道这个就能满足使用需求了。 补全没有问题。

发出来和大家分享。详细见博文链接。

5 个赞

可以用 chatgpt 来润色一下文章,英文写的还是有一些生硬。

1 个赞

更新一下链接。

我这两天做作业也想用unreal, 搜到这两个可能相关的. 后面那个有演示看上去还行. 文章也可以多列点小标题之类的==你这个事还是挺多步骤的, 在一个标题下面分好多好多小段我觉得不算太明朗.(可能是个人审美)

这两个链接我都看过。

前者的开发环境是Linux,重头戏是在最后修改.vscode里的类compile_commands.json,用脚本操作。这一操作是否对完美查找引用和定义有帮助,我不知道。

他还安装了一个ue4cli,至少对于我而言,我可以把UBT命令写在脚本里,而不需要借助其他工具。我喜欢直接且通用的做法。

第二个链接使用了一个plugin,加载到unreal编辑器,可以直接选择Emacs作为IDE。这会依赖plugin与unreal编辑器的兼容性,相当于把问题外包给了别人,于我不是一个妥善的解决方案,而且我对这个plugin没什么了解。

关于这个plugin,emacs-china里另一个帖子提到过。在emacs中开发unreal engine 4的方法

作者也出现在unreal engine论坛里。Emacs, Clangd and Unreal Engine - Community & Industry Discussion - Epic Developer Community Forums

btw,emacs-china的帖子里附有unreal engine论坛的另一个帖子,那哥们用rtags查的引用和定义。

说到这,你可以发现一些相关的帖子我都有看,他们遇到的问题,按自己的方式提供解决方案或者可以接受自己目前的解决方案,在互联网上可以找到不少。

但里面能够答疑解惑,或者和我是同道中人(解决方案的依赖性和便捷性以及思路描述)的,可能不多。

我也许也没有讲清楚clangd是怎么使用compile_commands.json文件的,但使用了clangd + lsp-mode的人,有这么一个认知,clangd需要compile_commands.json文件。

而开发unreal项目的人,知道UBT不奇怪,在Windows系统,如果鼠标右键未注册unreal相关的操作,就会用到UBT,这就和UBT的命令串起来了。

.vscode里的数据,对vscode而言,基于lsp实现补全和跳转,这和Emacs里用lsp是通的,问题就在于怎么拿来用。.vscode里不止一个类compile_commands.json文件,UBT生成的也不止一个.vscode文件夹,在什么程度上知道怎么用这两个文件,是我尝试说明的。

我写这篇博文的目的,在于提供一个途径去了解一个思路,我是怎么尝试打通unreal项目和Emacs的关系,来补偿我给出自己能接受的解决方案这一个过程中所走的弯路。