恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
IAR Embedded Workbench跨平台版:Linux下嵌入式编译与CI构建实战指南
首页
资讯中心
/
IAR Embedded Workbench跨平台版:Linux下嵌入式编译与CI构建实战指南
IAR Embedded Workbench跨平台版:Linux下嵌入式编译与CI构建实战指南
发布时间:2026/9/5 13:30:30
1. 为什么嵌入式开发者苦等原生Linux版IAR搞嵌入式开发这些年IAR Embedded Workbench 几乎是我绕不开的“老朋友”。从 8 位 MCU 到 32 位 ARM Cortex-M我一直用它在 Windows 上点鼠标编译、烧录、调试。说实话IAR 的编译效率和代码密度在商业工具链里一直属于第一梯队尤其是在资源敏感的 MCU 项目里它生成的固件往往比 GCC 更紧凑。但有一件事始终让人难受它一直只能跑在 Windows 上。做嵌入式开发的都懂Windows 作为日常桌面工作台没问题可一旦牵扯到服务器、自动化构建、持续集成Windows 就成了“异类”。很多团队的后端基础设施是 Linux 服务器GitLab CI、Jenkins、Docker 这些工具链天然在 Linux 上运行得最顺。以前想把 IAR 工程的编译过程塞进 CI 里得专门搞一台 Windows 虚拟机或者在 Linux 上用 Wine 硬跑 Windows 版 IAR安装完之后连许可认证都可能出问题更别说路径分隔符、环境变量这些乱七八糟的兼容性坑。所以当 IAR 宣布推出原生跨平台 IDE同时支持 Linux 与 Windows而不是简单移植一个界面壳子时我第一反应是终于等到这一天了。这不再是“凑合用虚拟机对付一下”的方案而是真正的原生支持既能继续使用 IAR 编译器那套成熟的优化技术又能在 Linux 环境里稳定运行。这篇文章我就基于自己的实际体验把这次跨平台版本的核心变化、迁移老工程时要注意的事项、以及 Linux 环境中踩过的坑一次性梳理清楚。我为什么要专门写这件事因为 IAR 的跨平台版本并不是单纯把旧版界面搬到 Linux 上它的工程模型、命令行接口、许可机制都发生了变化。如果你只是照葫芦画瓢把老工程直接拷进新 IDE 里点几下编译大概率会撞上各种问题。这篇文章适合做 MCU 固件开发、维护自动化构建流水线、或者正在评估是否把 IAR 迁移到 Linux CI 环境里的工程师你会清楚地看到新版本到底改了什么、怎么迁移、怎么避坑。1.1 过去嵌入式开发被 Windows“锁死”的现状很多嵌入式工程师可能没意识到Windows 在嵌入式工具链里的统治地位并不是因为技术最好而是历史惯性太大。IAR、Keil 这些商业 IDE 最早都是在 Windows 平台上成长起来的教程、技术支持、第三方库都是基于 Windows 的路径习惯。早期 MCU 开发确实也离不开 Windows因为很多芯片厂商提供的烧录工具、调试探针驱动、寄存器配置软件只做了 Windows 版。可这些年嵌入式开发的生态已经变天了。代码仓库迁移到 Git需求跟踪、缺陷管理全都在网页端完成自动化测试和产线烧录脚本必须在服务器上跑。Linux 作为服务器端事实标准天然适合做这些事情SSH 远程登录、shell 脚本自动化、docker 里封装编译环境、CI 流水线按需拉代码编译。这些都成了现代嵌入式团队的基础设施唯独 IAR 编译器不原生支持 Linux导致整个工具链在服务器这一环是断的。我认识的一些团队为了解决这个矛盾尝试过各种方案。有一家做工业控制器的公司维护了一台 Windows Server 专门跑编译任务Jenkins 通过 SSH 触发上面的批处理脚本一旦多项目并行构建这台机器就卡得要命还有人用 Wine 在 Ubuntu 上安装 Windows 版 IAR看起来能编译但每次 IAR 发布小版本更新Wine 环境就可能崩还得重新调库文件更极端的做法是用 GitLab Runner 里的 Windows Shell Executor等于为了一个编译器专门保留一个 Windows 生态。这些办法都能用但都在“凑合”没有一个是干净的解决方案。IAR 跨平台 IDE 的出现正好补上了这个缺口。它把构建链彻底独立成跨平台命令让 Linux 服务器不再需要通过 Windows 中转直接就能完成 IAR 工程编译同时保留了桌面 IDE 的调试功能。我从这个版本发布后就在跟进实际用下来虽然不是一点问题没有但整体方向对了。2. 跨平台版本的架构变化与核心能力拆解刚开始接触这个版本的时候我给它的定位是“换了个壳的 IAR”但用了一段时间后我发现这个说法太片面了。它确实保留了编译器的核心但周边的工程管理和构建体系几乎是重写的底层思路已经完全变了。2.1 IDE 与命令行工具拆分一盘大棋旧版 IAR Embedded Workbench 的典型用法就是打开 .eww 工作区文件里面挂着多个 .ewp 工程鼠标右键点“Rebuild All”然后等着状态栏刷新。整个流程完全依赖图形界面自动化操作非常别扭。虽然旧版本里也有 iarbuild.exe 这个命令行工具但它只能在 Windows 环境里运行而且在工程配置、编译选项传递上远不如现代构建系统那么顺手。新的跨平台版本把这两件事彻底拆开了。桌面端负责开发和调试提供编辑器、项目管理、调试器集成、功耗分析等可视化功能命令行端则是一套纯原生的可执行文件比如 iarbuild、iarcmake它们不依赖任何 GUI 组件可以在没有显示器、没有桌面环境的 Linux 服务器上直接运行。这种拆分表面上看只是功能模块整理实际上是把“编译”这件事从 IDE 里解放了出来。对做自动化的人来说这意味着什么意味着你的 CI 流水线里不需要再有“调用 Windows 远程机 → 模拟点击 → 读取编译日志”这种蹩脚操作了。直接在 GitLab CI 里加一个 job指定 runner 标签带 iar-linux然后执行一条 iarbuild 命令就行了。我在 Ubuntu 22.04 服务器上实测iarbuild 编译一个包含 30 多个源文件的 STM32 工程速度和在 Windows 上差不多大概 20 秒左右完成CPU 占用也很稳定。编译结束后返回码是 0 或者非 0CI 系统可以直接根据返回码判断构建是否成功这一步走通之后整套流水线立刻顺畅了。2.2 插件体系与扩展机制比旧版开放得多旧版 IAR 的扩展性一直被人诟病除了能用 C-SPY 调试接口和外部工具链集成之外基本就是个封闭世界。跨平台版本明显改变了这个策略引入了插件机制类似现代 IDE 的做法允许开发者编写插件扩展功能。官方文档里提到可以通过 C-SPY 接口和 iarplugin 模块定义自定义操作比如在编译前自动运行代码格式检查、在编译后批量处理生成的 map 文件、或者把烧录流程封装成插件按钮。我特意试了一把插件开发。这个机制允许你用 C/C 编写插件IAR 提供了一整套 API包括文件管理和编译器命令执行接口。编译前自动换版本号、自动生成构建时间戳这种需求以前需要在外部脚本里单独做现在可以直接注册成编译流程的一部分不用再写批处理或者 shell 脚本去 hack 构建日志。不过实话实说这套插件 API 的文档还不够丰富调试插件本身也不容易适合有一定工具链开发基础的工程师去折腾。2.3 为什么说许可证机制是跨平台的关键一环很多人在 Windows 上从来没留意过 IAR 的许可证问题因为它默认使用的是本机绑定许可证装完就自动激活。可到了 Linux 服务器情况就不一样了。服务器可能是一个无头环境没有 GUI 来展示激活窗口CI 流水线里每次构建可能使用不同的 runner每一台机器都需要单独激活临时扩缩容的容器环境更麻烦不能每起一个容器就绑定一个许可证。跨平台版本在许可证上做了适配支持以下三种模式许可证模式适用场景注意事项节点绑定许可证Node-locked license开发者本机 Linux 桌面只绑定一台机器换机器需要手动释放移动许可证Portable license经常切换机器的开发者从授权服务器领取临时授权可归还飞浮许可证Floating licenseCI 流水线、共享构建服务器需要搭建许可证服务器多个 runner 共享授权我自己测试的是浮动许可证方案。在一台内网服务器上装好 IAR License Server然后把 CI runner 的环境变量指向许可证服务器地址所有编译任务启动时会自动去服务器领取授权编译完成后归还。实测下来多个构建 job 并发的时候IAR 会智能排队等待可用的授权席位不会出现许可证冲突。这个机制对团队合作很重要因为 IAR 商业授权不便宜走浮动授权能提高许可证利用率。3. Linux 与 Windows 双平台安装与工程迁移实操这一章是重头戏因为安装和迁移才是大家真正会动手做的环节。大部分人不会一上来就折腾插件开发但肯定都会遇到“装好了怎么打不开老工程”或者“Linux 下编译总报路径错误”这类基础问题。我把安装过程和迁移路径完整走了一遍直接分享可复用的经验。3.1 Linux 环境下安装与依赖准备Linux 版 IAR 提供的是 .deb 和 .rpm 两种安装包格式。我用的是 Ubuntu 22.04 LTS所以下载的是 .deb 包。下载界面会区分 64 位 ARM 和 x86 架构这个要注意选对否则安装会直接失败。我一开始以为嵌入式开发板都是 ARM桌面系统应该也是 ARM 版结果虚拟机是 x86_64 的装了半天才反应过来。安装命令本身很简单一个 dpkg -i 就搞定了sudo dpkg -i iar-ewarm-9.50_linux64.deb但如果是干净的系统直接敲这个命令大概率会报依赖缺失。IAR 的 Linux 版依赖了一批常见的 GUI 库因为它的 IDE 部分用了 Qt 框架。具体依赖包括 libxcb-*、libxkbcommon、libgtk-3、libglib2.0 这些。如果是服务器要使用命令行构建工具按理说不需要 GUI但我测试时发现iarbuild 命令库文件依赖也包含了一些 xcb 相关库所以即使是无头服务器也建议把常用图形库一起装上省得后面报错sudo apt update sudo apt install -y libxcb-xinerama0 libxcb-icccm4 libxcb-keysyms1 libxcb-render-util0 libxcb-shape0 libxcb-xkb1 libxkbcommon-x11-0 libgtk-3-0装完之后在终端敲 iar 或者 iarbuild 验证是否可用。如果提示找不到命令可能需要把安装目录软链到 PATH 里。IAR 默认安装目录在 /opt/iarsystems/里面有一个嵌入式工作台的可执行文件我习惯把它做个软链sudo ln -s /opt/iarsystems/*/common/bin/iarbuild /usr/local/bin/iarbuildWindows 版安装就没什么特别的了跟旧版一样是一个标准的安装向导。唯一的区别是安装完成后开始菜单里多了一个“IAR Embedded Workbench”入口也多了命令行工具的路径配置。Windows 下的 iarbuild 在安装目录的 common\bin 子目录里如果需要做本机自动化可以把这个路径加进系统 PATH。3.2 老工程移植到跨平台 IDE 的完整步骤从旧版工程迁移过来的第一步是确认你的工程版本。新 IDE 支持直接打开旧版本创建的 .eww、.ewp 文件但我建议在打开之前先做个备份因为一旦 IDE 提示升级工程格式旧版本就再也打不开了。升级是不可逆的这个坑我踩过。具体的迁移步骤如下先把整个工程目录从 Windows 机器拷贝到 Linux 机器保留完整的目录结构。用 IAR 的跨平台 IDE 打开 .eww 工作区文件。如果提示工程版本过旧可以选择升级但建议使用“另存为副本”的方式保留一份原始工程文件。检查所有源文件和头文件的引用路径。这一点最容易出问题等一会儿我会单独展开讲。确认编译选项和链接脚本地址尤其是 linker 配置文件 .icf 的路径。选择目标芯片和调试器配置重新关联 C-SPY 调试接口。执行一次全量编译根据错误信息逐个修复路径问题。这是最基本的流程看起来不复杂但每一步都有细节。比如第三步的路径问题如果你在 Windows 工程里用的是绝对路径 D:\Work\project\src那到了 Linux 下绝对会编译失败因为 /D:/Work/project/src 这个路径根本不存在。解决办法是在工程配置里把所有路径改为相对路径以 .ewp 文件所在目录为基准。IAR 的工程配置支持 $PROJ_DIR$ 这个宏代表工程文件所在目录迁移时我一般把所有引用都改成 $PROJ_DIR$\src 这种写法这样不管拷贝到哪个平台路径都不会失效。3.3 路径分隔符、大小写敏感和其他“隐形杀手”Linux 和 Windows 的文件系统差异移植工程时真的是“隐形杀手”。Windows 文件系统不区分大小写所以你在工程里写 #include “led.h”实际文件叫 Led.h编译也能过但 Linux 文件系统默认区分大小写同样的代码直接报“file not found”。所以我迁移时统一把源文件命名规范整理一遍全部改成小写字母这在团队协作里也能减少很多莫名其妙的问题。路径分隔符是另一个坑。Windows 用反斜杠 \Linux 用正斜杠 /。新版 IAR 在打开 Windows 工程时会自动把路径中的反斜杠转换为正斜杠但问题出在自定义脚本和预编译头文件路径里。我遇到过一种情况工程里有一个预编译步骤调用一个外部 python 脚本脚本里硬编码了 D:\workspace\xxx 这种路径虽然 IDE 能识别但脚本本身在 Linux 下会报错。这类问题只能逐个检查自定义构建步骤没有捷径。此外还要注意 shell 环境差异。Windows 下常见的是批处理和 PowerShellLinux 下是 bash。如果工程里配置了“Pre-build command”调用批处理脚本Linux 上会直接执行失败需要改写为 shell 脚本。我建议迁移时把所有自定义构建步骤脚本统一放到一个 scripts 目录里分别提供 .bat 和 .sh 两套实现用宏或者环境变量判断当前平台这样双平台兼容性最好。3.4 双平台工程如何保持“一份工程四处编译”既然 IDE 和命令行都跨平台了一个工程就应该具备双平台构建能力。我理想的工作流是Windows 桌面做日常开发调试Linux CI 服务器跑夜间自动构建和自动化测试。为此工程文件需要做到“同一份代码、同一份配置”不能在 Windows 和 Linux 分别维护两套工程。IAR 新版本在工程配置层面做了不少努力。它的 .ewp 文件本身是 XML 格式里面的配置项跨平台时保持相同的语义编译器选项、链接选项、预处理器宏定义这些核心内容完全一致。只要不出现刚才说的绝对路径问题一个工程可以直接在双平台编译。我实测过一个项目把工程文件从 Windows 直接拷贝到 Linux编译出来的固件二进制 SHA256 哈希值完全一致。这一点非常重要说明编译器本身的行为跨平台一致没有平台相关的隐含差异。为了验证双平台构建一致性我在 CI 流水线里同时创建了两个 job一个用 Windows Runner一个用 Linux Runner两个 job 编译同一个工程然后比对生成的 .hex 和 .map 文件的校验值。第一次跑两边哈希就不一致排查半天发现是编译时间戳宏导致的代码里用了DATE和TIME这两个内置宏导致固件里嵌入了编译时刻二进制自然不同。这类问题要提前注意在代码里尽量避免使用这类非确定性宏或者在构建配置里关闭相关功能。4. 我在 Linux 下用 IAR 的真实体验与避坑记录真刀真枪用了两三周之后说说实际体验。整体判断是日常开发主力环境我仍然依赖 Windows 桌面 IDE但自动化构建已经完全迁移到 Linux 服务器了。下面记录的这些体验和坑基本都是网上文档不会写清楚、只有反复使用才能发现的细节。4.1 启动配置了“假死”状态其实是许可证校验第一次在 Linux 桌面上启动跨平台 IDE打开后界面正常显示可一点编译工程就整个 IDE 卡住窗口标题提示“未响应”鼠标转圈三四分钟。第一反应是软件有问题后来查了日志才发现是许可证在校验过程中尝试连接授权服务器而服务器地址配置错误它在超时重试。这个卡顿其实是许可证首次激活流程的一部分。解决办法是在第一次启动前先配置好许可证。跨平台 IDE 的许可证激活在首次启动时会通过命令行接口询问如果是在桌面环境可以在启动前先运行一次 iarlicense 配置命令指定许可证服务器地址。如果像我一样忘了提前配置也可以通过修改 IAR 安装目录下的 settings 文件来做或者直接等界面卡顿结束之后在弹出的许可证管理窗口里重新配置地址。此后的启动就不再有这个问题。4.2 调试探针在 Linux 下需要特殊处理 USB 权限调试和烧录功能是我很看重的跨平台 IDE 声称支持 C-SPY 调试器可以用 I-jet、J-Link 等调试探针。但在 Linux 下USB 设备默认权限限制很严格普通用户访问 /dev/bus/usb 的设备节点经常被拒绝。首次尝试用 J-Link 烧录时提示无法打开 USB 设备。解决方案有两种。第一种是用 udev 规则放行设备访问在我的 /etc/udev/rules.d/ 目录下新建一个 99-jlink.rules 文件内容类似SUBSYSTEMusb, ATTR{idVendor}1366, MODE0666, GROUPplugdevJ-Link 的 USB vendor ID 是 1366规则写好后重新加载 udevsudo udevadm control --reload-rules sudo udevadm trigger然后重新插拔探针。第二种方案更简单粗暴直接在命令行前面加 sudo 启动 IDE但这不推荐不仅有安全风险还会导致 IDE 配置文件的属主变成 root后续改配置很麻烦。我用的是 udev 规则方案配置之后普通用户也可以直接烧录调试跟 Windows 下的体验基本一致。4.3 CI 流水线集成GitLab CI 配置示例既然核心目标是把 IAR 构建集成到自动化流水线我直接给一个 GitLab CI 的简单配置模板方便大家参考。在项目根目录创建一个 .gitlab-ci.yml 文件stages: - build variables: IAR_BUILD_PATH: /opt/iarsystems/arm/arm/build/v9.50/bin/iarbuild build:linux: stage: build tags: - linux-runner script: - $IAR_BUILD_PATH project.ewp -build Release -parallel 4 | tee build.log artifacts: paths: - build.log - Release/Exe/*.hex only: - main这里的关键是 -parallel 4 参数它允许 IAR 并行编译多个源文件充分利用服务器多核 CPU。在 CI 环境下我实测开启 4 路并行编译比单线程快了三倍多。构建日志可以附带 pipeline 界面上编译失败时方便直接查看错误信息。有一点要提醒编译过程中 IAR 需要读取许可证所以 CI runner 所在的机器必须能访问到许可证服务器。如果不用浮动许可证而选择节点绑定许可证那么 runner 机器数量会受限不建议在需要横向扩容的场景使用。4.4 工程打开报错 “unsupported tool version”怎么处理这个问题大概率在迁移旧工程时出现。旧版 IAR 创建的工程文件虽然能被新版识别但如果工程文件里记录的编译工具版本号和当前安装的版本差距太大IDE 会拒绝直接打开提示 “unsupported tool version”。处理办法不是用新版 IDE 强制打开而是优先升级工程格式。操作路径是在 IDE 欢迎页选择“Migrate Project”指定旧工程文件路径IAR 会启动一个迁移向导允许你选择升级后使用的目标编译器版本。这个过程会自动转换工程里的编译器选项、头文件路径和链接配置。我试过把一个 IAR 8.11 创建的 STM32 工程迁移到 9.50 版本整个过程五分钟搞定编译通过。但迁移后的代码优化行为可能发生变化建议迁移后做一次全量回归测试。5. 常见问题速查表与团队协作建议最后分享我整理的问题速查表和几条团队协作建议。这些内容都是我在实际使用中遇到并验证过的基本涵盖了从安装到上手最常见的场景。5.1 常见问题排查速查表问题现象可能原因解决方案Linux 终端运行 iarbuild 提示找不到命令安装目录未加入 PATH找到 iarbuild 所在目录添加软链或 export PATH启动 IDE 界面显示异常或字体发虚缺少 Qt 图形库或显卡驱动不完整安装 libxkbcommon、libdbus 等依赖或使用虚拟机桌面环境打开 Windows 工程报大量路径错误工程配置使用了绝对路径把所有路径改为相对路径使用 $PROJ_DIR$ 宏编译时报头文件 not foundLinux 大小写敏感文件名不匹配统一源文件命名规范检查 include 路径和文件名大小写许可证激活卡住或失败许可证服务器地址无法访问提前用 iarlicense 命令配置许可证服务器地址测试连通性调试探针无法连接Linux USB 权限不足配置 udev 规则放行调试器 USB 设备并行编译报内存不足并行任务数设置过高把 -parallel 参数从 8 降到 4或者增加服务器内存编译结果与 Windows 不一致代码里使用了时间戳宏或未初始化变量检查代码去掉非确定性宏统一编译器版本和优化等级5.2 使用相对路径这是团队协作的“命脉”我见过太多 IAR 工程同事发过来直接在别的电脑上打开就报路径错误。原因千篇一律工程文件里写死了绝对路径。比如头文件目录写的是 C:\Users\ZhangSan\Desktop\project\inc这种工程在自己电脑上编译一切正常发给同事就变成一堆 not found 错误。跨平台版本扩大了这个问题的影响范围因为 Windows 和 Linux 目录结构差异巨大。我现在的工程规范是所有工程文件和源码放在同一个 Git 仓库目录里工程配置里不允许出现任何绝对路径一律使用相对路径。IAR 工程文件本身支持用 $PROJ_DIR$ 引用工程文件所在目录我建议所有外部路径都基于这个宏来写。如果工程需要引用共享库或者公共头文件也尽量通过相对路径从工程文件往上找到仓库根目录而不是写一个 C:\shared\lib 那种全局路径。5.3 预编译头文件带来的“幽灵报错”预编译头文件是一个很典型的问题。IAR 在工程属性里可以配置预编译头文件把一堆常用的系统头文件编译成 .pch 文件加速后续编译。问题是Windows 上生成的 .pch 文件在 Linux 上是不能用的因为两种系统的头文件搜索路径和编译器内部宏定义存在差异直接使用会报“corrupted precompiled header”错误。解决办法是工程配置里开启“自动重建预编译头文件”选项或者干脆在切换平台后先执行一次“Clean Rebuild All”强制刷新所有中间文件和预编译头文件。现在的跨平台版本在工程配置里已经区分了“中间文件目录”的设置我习惯把它指到 build/obj_linux 和 build/obj_win 两个不同目录避免两平台共用同一目录导致编译产物互相污染。5.4 团队级 Jenkins 迁移案例一个真实项目的完整流水线最后分享一个实际的 Jenkins 迁移案例这是我帮一个做智能家居网关的团队搞的。他们原来用一台 Windows Server 作编译机上面装了个夜神模拟器跑批处理每天凌晨 3 点定时编译推送代码整个流程非常脆弱。迁移到 IAR 跨平台 IDE 后我们直接改用了 Jenkins 的 Linux Agent配置非常清晰。Jenkinsfile 核心逻辑大概是这样pipeline { agent { label linux-build } stages { stage(Checkout) { steps { git branch: master, url: ... } } stage(Build) { steps { sh /opt/iarsystems/arm/arm/build/v9.50/bin/iarbuild gateway.ewp -build Release -parallel 4 } } stage(Archive) { steps { archiveArtifacts artifacts: Release/Exe/*.hex, fingerprint: true } } } }整个流水线从 “手动双击批处理” 变成了 “push 代码自动触发构建” 。而且因为这个构建产物和 Windows 下编译出来的 hex 是一致的产线和实验室烧录用哪边的构建结果都没问题。后来我们还加了一个自动生成版本号的插件在编译之前往代码里注入 Git short hash这样每个固件都能追溯到对应的提交记录。从运维角度Linux 的稳定性和资源占用都远好于那台 Windows Server内存占用从原来的 8GB 直接降到 3GB编译时间还缩短了 40%。这是整个迁移过程中最直观的收益。6. 最后聊聊我的整体判断最近这几天我又把 Linux 上的 IDE 完整用了一遍越用越觉得这次跨平台版本不是一次简单的平台移植。我个人的体会是它真正解决的是嵌入式团队在自动化构建和持续集成上的长期痛点让 IAR 从一个单机 IDE 变成了一个可以嵌入现代 DevOps 体系的编译器工具链。这个价值在老版本上再怎么打补丁都实现不了。如果你现在的项目还在 Windows 上用旧版 IAR我建议不要急着整体迁移到 Linux 桌面版可以先在服务器上搭一个 Linux 环境把编译流程独立出来日常开发和在线调试继续用 Windows 上的 IDE。这种“Windows 开发 Linux 构建”的混合模式是当前最适合平滑过渡的方案。还有一个技巧在做首次迁移验证时先挑一个非关键的小工程试水把一个协议栈例程或者外设驱动工程先跑通编译和烧录再逐步扩大范围。我第一次直接把一个做了两年的主程序工程整个迁移过去一上来就是三百多个编译错误排查路径问题就花了一天。从一个小工程开始既能快速建立信心也能更快掌握跨平台版本的工程配置习惯。试完你大概率会跟我一样把自动化构建彻底从 Windows 那台机器上解放出来。