Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

项目管理

6 个工具处理项目设置、脚手架、芯片选择、设置检查和 IDF 版本 pin。 它们合在一起,足以把一个空文件夹变成“准备好构建“,而不需要你打开 一次 menuconfig

工具做什么
project.init为新项目创建 .espctl.toml 和构建文件夹。
project.create从模板创建新 ESP-IDF 项目(hello_world、blink、empty)。
project.create_component向已有项目添加新组件。
set_target修改一个已有项目的芯片 target。
validate_config检查 .espctl.toml 文件是不是合法的。
idf_select_version(别名 idf.select_version)算出一次构建会用哪个 IDF 版本。

project.init

通过创建 .espctl.toml 和标准的构建子目录,在文件夹中设置一个 espctl 项目。

输入:

{
  "target": "esp32s3",
  "idf_version": "v5.3.1",
  "name": "my-project"
}
字段必需说明
target芯片 —— esp32esp32s2esp32s3esp32c2esp32c3esp32c6esp32h2esp32p4
idf_versionpin 特定 IDF 版本。默认用构建服务器最新的稳定版。
name项目友好名(写进 .espctl.toml)。

返回:

{
  "project_root": "/path/to/project",
  "config_path": "/path/to/project/.espctl.toml",
  "target": "esp32s3",
  "idf_version_resolved": "v5.3.1"
}

它对你的项目目录做什么:

  • 如果不存在则创建 .espctl.toml(不会覆盖)。
  • 如果不存在则创建 build/
  • 写一个默认的 .idf-version 文件 pin IDF 版本(如果你指定了)。

project.init 跑两次没事 —— 第二次什么都不做。


set_target

修改一个已经设好的项目的芯片 target。更新 .espctl.toml,重新生成 sdkconfig.defaults,清掉构建缓存。

输入:

{ "target": "esp32c6" }

返回:

{
  "previous_target": "esp32s3",
  "new_target": "esp32c6",
  "rebuild_required": true
}

注意: 切换芯片总是会清掉构建缓存。下一次 build 会是从头开始 的完整重建。没有捷径。


CLI: espctl set-target

一个本地小工具:校验芯片名,然后创建 build/<target>/。它会 联系构建服务器,也会写 .espctl.toml —— 服务器侧的等价工具 是 MCP 的 set_target.run

espctl set-target <target>

输入

参数说明
<target>(位置参数)esp32esp32s2esp32s3esp32c2esp32c3esp32c6esp32h2esp32p4 之一。其它名字会以退出码 2(invalid target)失败。

输出

Human 模式:

Target set to esp32s3 (build dir: /path/to/build/esp32s3)

JSON(--json):

{
  "target": "esp32s3",
  "build_dir": "/path/to/build/esp32s3"
}

它实际做了什么

  • <target> 和支持的芯片列表对照校验。
  • 如果 build/<target>/ 不存在就创建(幂等)。
  • .espctl.toml。下一次 espctl build 会根据这个目录布局 决定输出去哪里。

示例

# 把项目切到 ESP32-C3(创建 build/esp32c3/)
espctl set-target esp32c3

# JSON 输出,方便脚本消费
espctl --json set-target esp32s3

validate_config

检查一个 .espctl.toml 文件,返回 “valid” 或一个结构化错误。

输入:

{
  "content": "[project]\nname = \"my-app\"\ntarget = \"esp32s3\"\n..."
}

也可以传路径:

{ "path": "/path/to/.espctl.toml" }

返回:

{
  "valid": true,
  "warnings": [],
  "normalized": { ... }
}

…或者失败时:

{
  "valid": false,
  "errors": [
    {
      "line": 7,
      "column": 14,
      "message": "unknown field `targe` (did you mean `target`?)"
    }
  ]
}

这个工具是只读的,可以放心反复调 —— 许多助手在每次编辑 .espctl.toml 之后都会跑一次,做实时校验。


idf_select_version / idf.select_version

告诉你一次构建用哪个 IDF 版本,根据项目设置、构建服务器有什么、 以及任何明确的 pin。

输入:

{ "version": "v5.3.1" }

version 是可选的。省略时,工具按项目偏好顺序算:

  1. 显式的 version 参数
  2. 项目的 .idf-version 文件
  3. .espctl.toml 中的 [idf]
  4. 构建服务器的默认值

返回:

{
  "resolved": "v5.3.1",
  "source": "explicit-argument",
  "store_path": "/var/lib/aegis/espctl-store/idf/v5.3.1",
  "alternatives": ["v5.2.2", "v5.4.0"]
}

source 告诉你为什么选了这个版本,在构建挑了一个意外版本时很有用。 alternatives 列出构建服务器有的所有其他 IDF 版本,助手可以建议升级 或降级。


另见

  • store_versions —— 列出构建 服务器有的所有 IDF 版本。
  • doctor —— 健康检查。
  • 快速开始 —— 用 project.init 设一个新项目。