乐鑫技术交流
直播中

钱一辰

7年用户 956经验值
私信 关注
[问答]

请问APP版本号如何设置才有效?

按编程指南,在 application CMakeLists.txt 文件中, including project.cmake之前,增加了set(PROJECT_VER "0.1.0.1") 。
但是不起作用,编译信息看到的APP版本号,以及程序里用 esp_ota_get_partition_description() 读出的版本号,都是一个串,
诸如:version: 761849b-dirty,像是随机生成的。请问版本号该怎么指定才有效?谢谢!
                          

回帖(1)

世态薄凉

2024-6-26 17:33:22
您好!关于您的问题,我将为您提供一个详细的解决方案。首先,我们需要了解ESP-IDF框架的版本控制机制以及如何在CMakeLists.txt文件中正确设置APP版本号。

1. 版本号的格式

ESP-IDF框架支持语义化版本号(Semantic Versioning),格式为:主版本号.次版本号.修订号。例如:1.0.0。此外,还可以添加一个可选的构建元数据,例如:1.0.0+001。

2. 设置APP版本号

在CMakeLists.txt文件中设置APP版本号的正确方法是使用`set`命令,然后在`project`命令中指定版本号。以下是设置版本号的示例:

```cmake
# 设置项目名称和版本号
set(PROJECT_NAME "my_project")
set(PROJECT_VER "0.1.0.1")

# 导入项目
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
```

3. 编译信息和程序中的版本号

在编译过程中,ESP-IDF会生成一个名为`app_version`的分区,其中包含了APP的版本信息。您可以使用`esp_ota_get_partition_description()`函数读取这个分区的描述信息,以获取版本号。

然而,您提到的版本号看起来像是一个哈希值(例如:761849b-dirty),这可能是因为您的项目使用了Git作为版本控制系统,并且ESP-IDF自动从Git获取了提交哈希作为版本号。这种情况下,您需要在CMakeLists.txt文件中显式设置版本号,以覆盖自动获取的版本号。

4. 确保版本号生效

要确保设置的版本号生效,请按照以下步骤操作:

- 确保在`CMakeLists.txt`文件中正确设置了版本号,如上文示例所示。
- 确保在`project.cmake`文件之前设置了版本号。
- 清理项目并重新编译,以确保新的版本号被正确应用。

5. 检查版本号

编译完成后,您可以使用以下命令检查APP的版本号:

```c
#include "esp_ota_ops.h"

void check_app_version() {
    const esp_partition_t *partition = esp_ota_get_next_update_partition(NULL);
    const char *version = esp_ota_get_partition_description(partition);
    printf("APP version: %sn", version);
}
```

将上述代码添加到您的项目中,并在适当的位置调用`check_app_version()`函数,以查看APP的版本号。

希望这些信息能帮助您解决问题。如有其他问题,请随时提问。祝您编程愉快!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分