系统需求:

Win7/Win8/Win10/Win11
32/64位CPU
20MB以上磁盘空间

关于软件授权期限的说明:

目前软件并不收费。但作者无力维护旧版本,为促使用户更新软件(同时也促使作者自己积极更新),每个版本会内置数个月的授权限制。
此限制不影响功能使用。授权过期后将无法离网(联网检查更新后会获得新的临时授权)使用。
建议更新到新版本以避免此限制。

第三方软件:

如果要使用工程管理,编译,调试,自动补全等功能时,根据具体情况需要用到不同的第三方的软件工具。
编译调试msvc生成的程序需要用到VisualStudio的编译器。(调试器使用操作系统内建的dbgeng,也可以由用户手动从WinDBG中提取)
编译调试gcc生成的程序需要用到gcc的Windows版本,如:msys2/mingw32/mingw-w64。GDB的Windows版本。
编译调试llvm-msvc版本(即llvm官方windows版本)生成的应用需要依赖Windows SDK(VisualStudio中已经包含)。
编译调试llvm-mingw版本生成的应用需要依赖mingw32运行库以及gdb。
编译调试WSL应用时,您需要准备WSL环境,并在环境内安装gcc,gdb,cmake,ninja-build工具。
CMake工程需要用到CMake及Ninja-Build工具。
C/C++语法补全需要用到clangd。(llvm-msvc官方发行的Windows版本中包含,msys2中的版本不稳定经常崩溃)
Ninja-Build v1.10 官方网站
CMake v3.8及以上版本 官方网站
LLVM 官方网站 国内镜像
clangd v11.0以上版本官方网站
VisualStudio 官方网站
MSYS2 gd官方网站 国内镜像
GIT 官方网站
Intel OneAPI 官方网站 虽然intel的编译器在大多数场景下并没有太大优势,但其中的VTune等工具对于性能优化有非常大的帮助
EDX + GCC v14.1 + Binutils 2.41 + GDB v14.2 + CMake v3.29.3 +
Ninja-Build v1.12.1 + clangd v18.1.1  整合包(74MB)
更新时间: 2024-05-17
此包中gcc,binutils,gdb/clangd为私有编译版本。Ninja-Build,CMake由官方发行版中提取。
其中:
gcc整合了msys中gcc14.1-3的所有补丁。整合了mingw-w64-i686及mingw-w64-x86_64 v11.0.1运行时库,可以生成32/64位Windows桌面应用。
binutils包含了优化过的BFD库,大幅优化了处理PE COFF目标的性能(相比lld仍慢一些,但已经没有替换为lld的必要了)。
EDX + LLVM-Mingw 18.1.5(包含clangd) + GDB v14.2 + CMake v3.29.3 + Ninja-Build v1.12.1  整合包(82MB)
更新时间: 2024-05-17
此包中LLVM-Mingw为官方版本精简了arm/arm64相关工具。gdb为私有编译版本。Ninja-Build,CMake由官方发行版中提取。
clang编译速度较gcc快很多,只比msvc慢少许。
EDX + AirMCU/STM32Cube/GD32/XHSC SDK + arm-gcc-13.2.1 + GDB v14.2 + CMake v3.29.3 +
Ninja-Build v1.12.1 + clangd v18.1.1 + openocd 0.12.0 + pyocd 0.36.0   整合包(131MB)
更新时间: 2024-05-17
此包中arm-gcc为官方精简版本。gdb/clangd为私有编译版本。
AirMCU/STM32Cube/GD32/XHSC SDK, Ninja-Build,CMake,openocd,pyocd 由官方发行版中提取。
支持STM32/GD32/HC32F460/Air001/Air32F103系列MCU。其中AirMCU SDK还支持Arduino模式。
EDX + Pico C-SDK + arm-gcc-13.2.1 + mingw64-gcc v13.2 + GDB v14.2 + CMake v3.29.3 +
Ninja-Build v1.12.1 + clangd v18.1.1 + openocd 0.12.0   整合包(150MB)
更新时间: 2024-05-17
此包中arm-gcc为官方精简版本,mingw64-gcc/gdb/clangd为私有编译版本。
Pico C-SDK, Ninja-Build,CMake,openocd 由官方发行版中提取。
包含mingw64-gcc是为了编译pico工具程序。
以下为mingw拆分组件,包含binutils,mingw-crt,gcc,gdb的不同版本独立包,可任意组合使用。
更新时间: 2024-05-17
Binutils v2.41 优化版 / v2.40 优化版 原版
Mingw64/Mingw32 CRT v5.0.4 v7 v8.0.2 v9 v10 v11.0.1
GCC v10.5 SEH SJLJ / v10.4 SJLJ
GCC v11.4 SEH SJLJ / v11.3 SEH SJLJ
GCC v12.3 SEH SJLJ / v12.2 SEH SJLJ
GCC v13.2 SEH SJLJ / v13.1 SEH SJLJ
GCC v14.1 SEH
GDB v12.1 v13.1优化版 v13.2优化版 v14.1 v14.2
任意的bintuils + crt + gcc可组成一套完整的工具链。
Binutils优化版使用了我优化的bfd库,大幅提升了ld/ar/ranlib/strip/objcopy/objdump等工具的性能。其中链接大型调试版本应用时,性能提升了约100倍。
(v2.41版官方引入了针对COFF格式的优化补丁,与我优化的方案类似,但性能要差一些(最多差1个数量级)。我这里还原了官方的优化补丁,改为我的实现。)
GCC5~9的编译速度明显要好于GCC10~13。但对语言标准支持会差一些。使用C++20相关特性,请使用GCC10以上版本。
GCC12/13包含了MSYS2中相应的补丁,如:改进支持预编译头等。
GCC的SEH、SJLJ版本差别在于C++异常的实现方式不同,存在一定的性能和兼容性差异。在同一系统中请使用相同的异常实现方案。
GDB v13.1优化版包含了优化过的bfd库,加载符号性能较原版本提升约10~20%。受Python的影响,GDB不支持Win10以前系统。
MinGW CRT v5~v9可以支持生成Windows 98、Windows XP应用。
以上组件皆为x86-64版本,运行在win64系统上。可以支持生成win32目标应用。
Mingw32-Make 下载 (xmake编译cmake库时需要用到,放到gcc的bin目录即可)
GDB v11.1 for Win7 下载 (Win7系统用户需单独下载此版本)
clangd v13 + CMake 3.21 + Ninja-Build 1.10 下载
Mingw64-GCC-11.4中文版本  下载 网友提供的中文化GCC版本,翻译了大量编译提示信息

第三方软件配置:

CMake,Ninja-Build,GDB需要添加到系统的PATH环境中 或 toolsets目录中。
建议使用整合包,以减少配置工作。
以下工具会从相应安装路径中自动搜索:
llvm-msvc,clangd会自动从llvm的安装路径中查找。
msvc的编译器及Windows SDK会自动搜索VisualStudio的安装路径。
Intel oneAPI编译器会自动搜索其安装路径。
mingw/msys2会自动搜索C,D,E,F盘下的msys32/msys64/mingw32/mingw64等路径。
WSL会自动搜索已经安装的WSL分发版本。
STM32Cube SDK/J-Link/ESP-IDF会自动搜索已经安装的版本。
所有搜索动作会自动进行,无需用户干预。

常用见问题

如何关联文件管理器右键菜单?

菜单栏 > 帮助 > 关联右键菜单

如何关联Win11文件管理器右键菜单?

0.4.0.819版本开始支持Win11右键菜单
但必须打开 系统设置 > 开发人员模式 > 从任意源安装应用 选项
准备好后依次运行以下命令即可:
运行 regsvr32 shell_ext.dll 手工注册文件管理器扩展
运行 powershell -command add-appxpackage -register appxmanifest.xml 注册应用

如何改变配色?

菜单栏 > 文件 > 编辑配置文件
找到 <style ...>...</style>节点
其中window="light"为浅色窗口,其中window="dark"为深色窗口
具有enabled="true"属性的style节点 或 第一个style节点 为当前配色

如何使文件管理器右键菜单打开文件到当前编辑器?

菜单栏 > 文件 > 编辑配置文件
找到config > global > single_instance
将“enabled”属性改为“true”并保存

如何关闭自绘窗口框架,使用系统默认窗口框架?

菜单栏 > 文件 > 编辑配置文件
找到config > global > custom_title
(旧版本无此配置,可参考应用根目录下的config.xml)
将“enabled”属性改为“false”保存后重启应用
(注意:这时窗口的关闭按钮会失效,可通过菜单关闭应用)

如何创建CMake工程?

新版本已经支持简单的工程向导,可以直接创建工程。
以下旧的创建方式依然有效:
1. 新建并打开一个空目录
2. 在“工程”面板 的右键菜单中选择 “新建” > “文件”
3. 输入文件名“CMakeLists.txt”并回车
4. 修改并保存自动生成的CMake模板

如何为CMake设置参数?

新版本已经支持CMake参数配置,在工程配置对话框>CMake面板中配置。(以下旧方式不建议使用)
打开工程根目录下自动生成的settings.lua
找到[".cmake"] = {...}配置
按如下方式修改:
[".cmake"] = {
    ["argument"] = {
        [[-DCMAKE_PARAM1=ON]];
        [[-DCMAKE_PARAM2=OFF]];
    }
}

如何解决更新VS后CMake工程编译失败的问题?

菜单栏 > CMake > 重建缓存

如何设置CMake工程运行/调试目标的参数?

工程面板 > 右键菜单 > 配置 > 调试&运行

如何使用msys2中的第三方库?

使用msys2中的工具链时,可以直接引用已经安装的第三方库。但需要手动安装。
EDX中自带了msys-pkg工具,可以用于自动下载安装msys2中的第三方库,无需安装msys2相关环境。(仅支持CMake工程)
* 在CMake项目中,工程面板 > 鼠标右键菜单 > 配置 > MSYS2界面中勾选"在CMake工程中启用MSYS2支持"选项。
* 在镜像列表中选择一个适合的下载镜像服务器。
* 点击确定保存配置。EDX会自动在工程中添加msys-pkg.cmake文件,并在主工程的CMakeList.txt中添加相关引用与使用说明。
* 通过find_package(msys-xxx)引用你想要的库后,工程在编译时会自动下载/安装/更新相关的库。(可通过alt+.列出库补全列表)
* 通过target_link_libraries引用库名(上步中"xxx"部分)。如果想引用静态库,可添加"-static"后缀,如:xxx-static

使用mingw/msvc工具链时,会自动引用mingw64/mingw32目标的库。
使用llvm-mingw时会自动引用clang64/clang32目标的库。
注意!非msys2官方工具链可能会遇到兼容性问题。
注:静态库可能存在依赖顺序问题,部分库需要手动配置静态编译宏参数。llvm-mingw使用静态库可能会产生符号冲突。msvc只能使用部分动态库。

如何创建XMake工程?

创建XMake工程需要XMake相关工具,且在PATH环境中添加相关路径
检测到有效的XMake工具后,工程向导中会显示XMake工程相关选项

XMake引入第三方CMake库用整合包编译出错怎么解决?

通过xmake引用第三方库需要解决网络问题,可通过xmake g --proxy='<PROXY>'设置代理
xmake编译cmake工程时需要用到mingw32-make.exe,整合包中并未包含(在这下载)
edx依赖xmake生成的ninja脚本进行目标分析
2.7.9版的xmake中,相关脚本存在bug,需要手工修复
https://github.com/xmake-io/xmake/pull/3888

如何使用VCPKG中的库?

EDX会通过PATH及VCPKG_ROOT环境变量搜索vcpkg.exe
如果找到可用的vcpkg(在工具链界面中有对应的显示),则会自动启用对vcpkg的支持。
在经典模式下,EDX会自动把已经安装的当前编译器对应版本的头文件、库路径添加到编译选项中。
此时你需要在CMakeLists.txt中添加对应的链接库(find_package仅在vc下有效,且大多数库不支持)
在清单模式下,你需要手动为工程添加vcpkg.json文件。EDX会自动为CMake添加相关的编译参数。

如何一次性折叠/展开所有代码块?

全选 > Ctrl + M, M

如何一次性折叠/展开区块下的所有代码块?

Ctrl + M, L
Ctrl + 鼠标左键 点击要折叠/展开代码块行号后的 "+"

如何快速关闭打开的多个文件?

文本编辑器 > 右键菜单 > 关闭其它文件
将关闭除当前文件外的所有其它文件
工程面板 > 选中目录 > 右键菜单 > 关闭已打开文件
将关闭当前目录下已经打开的所有文件

如何切换文件的编码?

点击状态栏中的当前编码信息,在弹出的编码菜单中选择即可

如何取消正在执行的文件搜索任务?

双击状态栏中的搜索进度即可取消当前的搜索任务
或点击搜索对话框的关闭按钮

如何中断当前的编译任务?

Ctrl + Pause
或在输出控制台执行"stop build"命令
或在 CMake菜单 选择 停止生成 (>=v0.4.8.2074)

如何附加到进程进行调试?

对于msvc目标,在输出控制台执行 windbg PID 命令
对于gcc目标,在输出控制台执行 gdb PID 命令
(PID为目标进程ID)

搜索不到我的工具链怎么办?(如何添加SSH工具链)

通过 菜单栏 > 窗口 > 面板 > 工具链 打开工具链管理界面
通过下方的 添加工具链 选择你的工具链目录
(目前仅可添加mingw系列工具链 及 linux下的SSH远程工具链)

SSH远程工具链的找不到系统头文件,无语法提示怎么办?

SSH远程工具链的系统头文件需要下载
打开工具链管理界面
选中对应的远程工具链,点击下方的 下载头文件 按钮

如何避免SSH远程开发时上传过多的文件?

SSH远程构建时只会自动更新有变更的文件
如果有不需要上传到构建服务器的文件,可通过 配置 界面设置 上传过滤器

mingw32中的gcc编译程序很慢怎么办?

binutils中的ld链接速度很慢,尤其是启用了LTO和调试信息的情况下。
使用我优化过的Binutils能大幅(多达100倍)提升链接速度。
另: 大多数情况下,可以使用llvm中的lld来代替ld。但lld存在兼容性问题。部分程序可能无法正常链接。
适当的使用预编译头可以节约大量的编译时间。
拆分编译单元可以减少修改代码后的编译代码量。但会增加整体编译时间
合理组织代码结构,减少代码依赖关系。有利于减少编译的代码量。
C++中的模板是影响编译速度的重要因素。

为什么C++没有语法提示?

C++的语法提示依赖于clangd。请确保系统中安装了clangd。或clangd在搜索路径里。
如果语言服务中有日志,说明clangd已经启动。
此时,语法提示仍然不正常可能是编译器环境异常,或Clangd不支持你使用的编译器。
提交ISSUE,我会尽可能做兼容处理。

Clangd崩溃了怎么办?

请尝试使用最新的官方发行版本
在输出控制台执行reset lsp可以重启clangd
自0.4.4.1678版开始,EDX默认开启了clangd的并行索引功能,此功能易导致clangd崩溃。
在lsp.lua中搜索并注释掉代码行 "--j=8" 可关闭并行索引。

Clangd在工程(WSL/SSH)中有中文路径时无法正常工作?

clangd处理中文路径有BUG,可以使用我修改后的版本 - CLANGD中文路径FIX 17.0.6

如何自定义快捷键?

自0.4.5.1701版开始,实现了新的用户自定义脚本加载机制。可通过用户脚本配置快捷键。
配置文件位置如下:
全局配置
{USER}/AppData/Local/ed-x.cc/edx/user-config.lua
{EDX ROOT}/user-config.lua
以上两处位置,按优先顺序加载其中之一。
工程配置
{PROJECT}/.edx/user-config.lua

注册代码如下:
1. 注册新的快捷键,保留原快捷键,不更新菜单
edx.register_short_cuts(_op_scope._global, {_op.next_buffer, k("ctrl+alt+n")});
edx.register_short_cuts(_op_scope._global, {_op.prev_buffer, k("ctrl+alt+p")});
2. 更新快捷键,会注销 原有操作 的对应快捷键,并更新对应操作的菜单。
!!!如果快捷键在其它范围被绑定到了其它操作命令上,并不会被注销此操作!!!
update_short_cuts(_op_scope._global, { _op.next_buffer, k("ctrl+alt+n") });
update_short_cuts(_op_scope._global, { _op.prev_buffer, k("ctrl+alt+p") });
参数1为快捷键作用范围。参数2为 {命令id, 快捷键序列...}。

注:当新注册的快捷键与系统原有快捷键冲突时,需要先注销系统绑定的操作。如下:
update_short_cuts(_op_scope._global, { _op.next_buffer }); // 注销原 _op.next_buffer 操作绑定的快捷键 ctrl+alt+n
update_short_cuts(_op_scope._global, { _op.new_op, k("ctrl+alt+n") }); // 绑定 ctrl+alt+n 到 _op.new_op

怎么编译/调试单个源文件?

在无工程时,打开单独的C/C++源代码可以直接编译/调试。
在工程中,编译非工程内的单个源文件需要在首行添加工具链注释。如下:
// toolset:[工具链名称]
如果有特别的编译参数、运行参数需要配置,也可以在文件首部添加工具链注释。如下:
// args: 运行参数1 运行参数2
// flags: /Debug
// lib: gdi32
在文件首部添加“//”后,按 Alt + . 会弹出相关的补全提示。

如何用EDX制作Portable开发环境?

EDX不会主动读写系统注册表,不会依赖特定系统目录/文件。
默认情况下,EDX的配置和用户数据会保存在当前用户的AppData/Local/ed-x.cc/edx目录下。
当edx主程序目录下存在".edx-data"目录时,会使用此目录代替用户的AppData目录。
EDX在搜索工具链时,会搜索主程序目录下的toolsets目录,工具链可放到此目录下。
具体结构可参考gcc/llvm-mingw整合包的结构。
注意:仅支持mingw/llvm-mingw/cmake/xmake等相关工具

如何用EDX开发ESP-IDF项目?

0.4.9.2135版本重新修复了对ESP-IDF的支持,并支持在不同版本的SDK之间切换。
你需要首先安装ESP-IDF的SDK, 下载地址
安装完成以后,需要手工执行 <IDF_TOOLS_PATH>/frameworks/esp-idf-vX.X.X/install.bat 进行ESP-IDF的初始化。
(可能需要联网下载部分组件,部分组件可能需要代理服务器才能顺利下载)
ESP-IDF初始化完成后,即可使用EDX打开ESP-IDF项目。
(EDX会通过IDF_TOOLS_PATH环境变量定位ESP-IDF SDK,请确保此变量设置正确。安装ESP-IDF会自动设置此变量)
多个不同版本的ESP-IDF请确保安装在同一IDF_TOOLS_PATH下。

如何用EDX开发ESP8266项目?

0.4.9.2135版本添加对ESP8266_RTOS_SDK的支持。
你需要首先安装ESP-IDF的SDK,见上面内容。
把ESP8266_RTOS_SDK-v3.4.zip解压到<IDF_TOOLS_PATH>/frameworks目录下。 下载地址
确保目录结构为 <IDF_TOOLS_PATH>/frameworks/ESP8266_RTOS_SDK
ESP8266_RTOS_SDK没有提供install.bat,你需要参考install.sh中的步骤手工执行初始化。
* 在命令行中执行 tools\idf_tools.py install 安装相关工具
* 在命令行中执行 tools\idf_tools.py install-python-env 安装Python虚拟环境
提示:Python虚拟环境可复制ESP-IDF生成的,只需要重命名为rtos3.4_py3.11_env即可
初始化需要安装Python,下载过程中需要联网,有可能需要使用代理服务器
初始化完成后即可在EDX中使用ESP8266_RTOS_SDK。
ESP8266_RTOS_SDK不支持多版本并存。

快捷键列表:

文件

新建文件 Ctrl + N
打开文件 Ctrl + O
打开目录 Alt + O
打开文件到当前缓冲 Ctrl + Shift + O
关闭当前文件 Ctrl + F4
保存文件 Ctrl + S
另存文件为 Ctrl + Shift + S
保存所有文件 Ctrl + Shift + A

移动光标

移动光标(单个字符)
移动光标(整个单词) Ctrl +
Ctrl +
移动光标到行首 Home
移动光标到行尾 End
行移动光标
整页移动光标 PageUp
PageDown
移动光标到首行 Ctrl + Home
移动光标到尾行 Ctrl + End
移动光标到对应括号 Ctrl + ]
移动光标到指定行号 Ctrl + G
移动光标到前一历史位置 Ctrl + -
移动光标到后一历史位置 Ctrl + Shift + -

选择

全选 Ctrl + A
取消选中区域 Esc
扩展选区(单个字符) Shift +
Shift +
扩展选区(整个单词) Ctrl + Shift +
Ctrl + Shift +
扩展选区到首行 Shift + Home
扩展选区到尾行 Shift + End
向上选中一页 Shift + PageUp
向下选中一页 Shift + PageDown
扩展选区到对应括号 Ctrl + Shift + ]
选中当前单词 Ctrl + W
列选择 Alt + Shift +
Alt + Shift +
Alt + Shift +
Alt + Shift +
Alt + Shift + 鼠标左键单击
Alt + 鼠标左键拖选

编辑

向上插入新行 Shift + Enter
向下插入新行 Ctrl + Enter
删除后一个字符 Delete
删除前一个字符 Backspace
删除整行 Shift + Delete
删除选区 Delete (选中状态)
Backspace (选中状态)
删除到后一个单词 Ctrl + Delete
删除到前一个单词 Ctrl + Backspace
剪切整行 Ctrl + X
剪切选区 Ctrl + X (选中状态)
撤销 Ctrl + Z
复制整行 Ctrl + C
复制选区 Ctrl + C (选中状态)
重做 Ctrl + Y
粘贴 Ctrl + V
循环粘贴 Ctrl + Shift + V
重复整行 Ctrl + D
重复选区 Ctrl + D (选中状态)
增加缩进 Tab (选中状态)
减少缩进 Shift + Tab
格式化 Ctrl + KCtrl + F
Ctrl + KF
注释代码 Ctrl + KCtrl + C
Ctrl + KC
取消注释 Ctrl + KCtrl + U
Ctrl + KU
切换选区/光标行注释状态 Ctrl + /
选中文本转为小写 Ctrl + U
选中文本转为大写 Ctrl + Shift + U
快速修复 Alt + Enter (在含有错误/诊断提示的行)
此功能依赖clangd的Code Action能力,并不是所有异常都有修复方案。
由于clang的BUG,部分修复结果是错误的,但可供参考
受clangd的响应速度影响,对大型文件修复需要等待上一次的修复完成,且clangd发布了新的诊断信息。
否则,将产生异常的结果。

查找替换

查找 Ctrl + F
多文件查找 Ctrl + Shift + F
替换 Ctrl + H
多文件替换 Ctrl + Shift + H (仅支持在已经打开的多个文件中替换)
查找下一项 F3
查找上一项 Shift + F3
增量查找 Ctrl + I
向上增量查找 Ctrl + Shift + I
查找帮助信息 F1

代码提示与导航

列出成员/补全 Alt + .
显示参数信息 Alt + ,
显示符号信息 Ctrl + Q
鼠标悬停
跳转到头文件 Ctrl + Shift + G
跳转到声明/定义 F12
列举当前文件结构 Ctrl + F12
查找实现 Alt + F12
查找引用 Shift + F12
定位当前文件 Alt + L
定位下一处问题 Alt + N
定位上一处问题 Alt + Shift + N

编译/调试

编译当前项目 Ctrl + B
停止编译 Ctrl + Break
Ctrl + Pause
编译所有项目 Ctrl + Shift + B
重新生成所有项目 Ctrl + Alt + F7
编译并运行 Ctrl + F5
启动调试器 F5
终止调试 Shift + F5
中断运行 Ctrl + F9
步过 F10
步入 F11
步出 Shift + F11
跳转执行点 Alt + F9 (仅对当前栈帧有效,有可能引起帧错误)
切换断点 F9
列举所有断点 Ctrl + Alt + B

窗口

切换到下个文件 Ctrl + Tab
切换到上个文件 Ctrl + Shift + Tab
切换全屏 Alt + Shift + Enter
切换到文本编辑器 Esc (文本编辑器在非焦点状态下)
切换到工程面板 Ctrl + Alt + L
切换到类视图面板 Ctrl + Alt + E
切换到输出面板 Ctrl + Alt + O
切换到查找面板 Ctrl + Alt + F
切换到调试器面板 Ctrl + Alt + D
切换到局部变量 Ctrl + Alt + A
切换到监视面板 Ctrl + Alt + W
切换到调用栈 Ctrl + Alt + C
切换到线程面板 Ctrl + Alt + S
切换到模块面板 Ctrl + Alt + M