开发
本章将帮助用户在 ZStudio 中创建解决方案和项目。解决方案和项目的概念可以参考 Visual studio 中 Project / Solution 结构。
解决方案和项目
在 ZStudio 中,在 ZStudio 中,解决方案是包含一个或多个项目的容器,每个项目可以独立构建并且拥有自己的代码和配置。解决方案作为顶级容器,负责协调和管理多个项目之间的依赖关系以及生成顺序。
解决方案(Solution)可以包含多个项目(Project),同一个项目也可以存在于多个解决方案中;类似的,同一份源码也可以用于生成不同项目。
项目与项目文件
每个项目仅能生成一种项目类型文件,如可执行文件或者库文件。但用户可以为同一份源码创建多个项目生成不同类 型的文件。ZStudio
为解决方案中的每个项目生成单独的 {project_name}.zsproj
项目文件,
{project_name}.zsproj
包含项目的所有配置,包括该项目的构建、运行、调试、性能分析等设置参数,不建议手动编辑该文件。
解决方案与解决方案文件
ZStudio
中的解决方案可以包含单个或多个项目。当用户打开某个解决方案时,ZStudio
自动加载该解决方案包含的所有项目。用户可以同时处理属于同一个解决方案的多个项目,但是在单个
ZStudio
窗口中只能打开一个解决方案,用户也可以根据需要打开多个窗口同时处理多个解决方案。ZStudio
中的解决方案由文本文件 {solution_name}.zssln
描述,当用户将多个不同的项目配置为解决方案的一部分,文本文件将自动更新描述,不应对其进行手动编辑。
解决方案资源管理器
解决方案资源管理器(Solution Explorer)中包含了与解决方案/项目有关的大多数操作,解决方案资源管理器包含项目快捷控制(Project Controller)、项目导航(Project Navigator)和文件导航(File Navigator)等视图,用户可以通过右上角的 ( 更多操作...)按钮自定义显示或隐藏各个视图。
项目快捷控制(Project Controller)提供了项目开发最常用的工具快捷按钮,从左往右依次为构建、构建配置、运行、运行配置、调试、调试配置。用户也可以通过项目快捷控制中的下拉框快速切换当前操作的项目并更改项目的配置、目标平台、目标 SoC。
**项目导航(Project Navigator)**以目录树结构显示了解决方案中每个项目的结构,每个项目节点展开后包含头文件节点(Headers)、源码文件节点(Sources)、项目输出(Output)、引用节点(References)以及外部依赖(Dependencies)节点。
**文件导航(File
Navigator)**中存放了解决方案中包含的所有文件,包括解决方案文件
{solution_name}.zssln
、项目配置文件 {project_name}.zsproj
及所有项目文件夹。
快速上手
本节将介绍如何在 ZStudio 中创建解决方案和项目,如何在静态库项目和可执行项目之间创建引用关系,以及如何添加项目的外部依赖。
创建空解决方案
ZStudio 支持从头开始构造解决方案和项目,用户可以创建不包含任何项目的空白解决方案。
- 在项目导航中,点击"新建解决方案"按钮或者在菜单栏中选择"文件" > "新建解决方案"。
- 在对话框中,输入解决方案的位置和名称(下图中以 Quick_Start 为例),点击"创建" 。
创建新项目
创建空解决方案后,点击项目导航(Project Navigator)中的的"新建项目",向解决方案中添加一个 Hello 项目。在"创建新项目"对话框中,用户需要为新建项目输入名称、存放位置、项目类型、语言及使用的工具链等基本信息。
将"项目类型"选择为"可执行项目,并"在"解决方案(Solution)"下拉框中选择"添加至现有解决方案(Add To Exist)" 将 Hello 项目添加至 Quick_Start 解决方案中。
用户也可以选择"添加项目"并指定本地电脑中的路径将已存在的项目添加至当前解决方案中。
当用户在没有解决方案的情况下直接新建项目时,ZStudio 会自动创建一个与项目同名的解决方案作为容器,将该项目包含在其中,确保即使用户没有显式创建解决方案,ZStudio 仍然会为项目提供管理结构。
添加项目代码并构建运行
用户可以向 Hello
项目中添加项目代码。右键点击"Sources"节点选择"新建源码文件",或者直接点击"+"新建源码文件。在弹出的对话框中为源码文件命名
main.c
。源码文件将在编辑器中打开,请在编辑器中输入代码并保存。
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello World\n");
return 0;
}
点击 Build 按钮开始构建 Hello 项目,在底部的构建控制台中检查构建输出和结果。
点击 Run 按钮并在运行控制台中检查运行结果。
添加项目引用
解决方案通常包含多个项目,如静态库项目,动态库项目或可执行项目,这些项目之间可能存在引用(Reference)。添加项目引用关系,除 Hello 项目外,需要再新建一个 Add 静态库文件项目。
-
在"解决方案资源管理器"中的"项目导航"的右键上下文菜单中,选择"新建项目"或者将鼠标悬浮于"项目导航"节点然后单击 + 按钮。
在"添加新项目"页面中,将项目命名为 Add,然后在"项目类型"下选择"静态库",将新建项目 Add 添加至现有解决方案 Quick_Start 中,然后选择"创建"。
-
向 Add 项目中添加代码
展开项目目录树,右击"头文件(Headers)"节点选择"新建头文件",在弹出的对话框中为头文件命名为 add.h 并选择文件存放位置。文件将在编辑器中打开,请在编辑器中输入代码并保存。
int add(int num0, int num1);
add.h
存放于项目文件夹并显示在"Headers"节点中。右键点击"Sources"节点选择"新建源码文件",或者直接点击"+"按钮。在弹出的对话框中为源码文件命名
add.c
。这里定义一个简单的加法运算函数。int add(int num0, int num1)
{
return num0 + num1;
}add.c
存放于项目文件夹并显示在"Sources"节点中。 -
添加引用关系
添加引用(Reference)会在两个项目之间创建依赖关系,构建解决方案时会先构建 Add 静态库项目,再构建当前 Hello 可执行项目。
右键单击 Hello 项目的"引用 (Reference)"节点,然后从上下文菜单中选择"管理引用" 。
在"管理引用"对话框中,勾选 Add 项目。在链接库依赖项(Link Library Dependency)窗格中,指定是否链接
.lib
依赖项目生成的文件,此处选择"True",然后"保存" 。展开 Hello 项目的引用关系节点即可看到 Add 项目。 -
检查项目引用是否正确创建了依赖关系:将 Hello 设置为当前活动项目,然后点击"构建"。在控制台中检查构建结果。
注意用户在修改了
.h
头文件但未修改.c
源文件的情况下,需要先从菜单栏执行 "Build" > "Clean" 再重新进行构建。 -
点击"运行"并确认项目输出。
静态库的引用会在构建时将其链接到最终的二进制文件中,不会显示在项目构建配置里编译器的头文件路径列表中。
添加项目依赖
当用户创建的项目需要在 SoC 或开发板上运行时,需要添加适用于 SoC 或开发板的软件包等外部依赖(Dependencies)与项目一同进行构建。除了适用于 SoC 或开发板的软件包,项目依赖也可以是通用的函数库。用户可以遵循以下步骤添加项目依赖:
-
在项目导航中找到需要添加外部依赖的项目。
-
展开目录树,右键项目的"依赖(Dependencies)"节点,然后从上下文菜单中选择"管理依赖" 。
-
在可下载包列表中找到需要添加的软件包(包含用户导入的软件包),双击软件包将其添加至依赖包列表。
管理依赖弹窗上方的 SoC 搜索栏自动填入项目配置中选择的 SoC, 用户可以通过在微架构搜索栏中输入关键字快速找出需要的软件包,可下载包列表仅显示包含搜索字段的软包同时过滤掉所有不匹配的项。
-
用户可以在管理依赖弹窗的依赖包列表中更改依赖包的构建和链接顺序或者移除依赖包。所有添加进项目的依赖包将依序同步显示在项目的依赖节点中。
从示例解决方案开始
ZStudio 中内置了一些示例,用户可以通过"从示例解决方案开始"选项打开这些项目。
在 ZSolution 主菜单中,选择"文件" > "从示例解决方案开始",从下拉框中选择一个示例,用户可以为示例解决方案重命名并指定存放位置然后点击"打开"。
示例项目将在当前窗口中加载出来。
从存储库克隆项目
用户也可以从在 ZSolution 中直接克隆存储库项目,并为其创建一个解决方案。
-
在 ZSolution 主菜单中,选择"文件" > "从存储库克隆项目"
-
在弹窗中指定仓库的 URL,并指定它在本地的存放位置,如果你的仓库中包含子仓库,请候选"递归克隆"。
用户可以在右下角通知弹窗中查看克隆进度。
克隆完成后,用户需要选择如何处理仓库。
导入 Makefile 或 CMake 项目
ZStudio 仍在不断优化对 Makefile 或 CMake 项目的完全支持,欢迎在 1nfinite 留下反馈。
导入 Makefile 项目
若要导入 Makefile 项目,请遵循以下步骤:
-
在菜单栏选择"文件" > "导入 Makefile 项目"。
-
在"项目根目录"中点击(浏览)按钮,在文件系统找到需要导入的项目的最上层文件夹。
-
ZStudio 会在项目根目录中检测 Makefile 并识别为入口文件,用户也可以直接手动指定项目下的 Makefile 作为入口文件。
-
添加 Make 参数,ZStudio 将使用这些参数提取项目信息,例如:
TOOLCHAIN=terapines
。 -
Make Clean 参数:如果导入的项目中已经被 make 编译过且存在编译的中间文件没有执行
make clean
命令,那么需要指定clean
参数清理 make 生成的输出文件,否则会导致项目导入失败。提示执行 clean 可以清除之前构建的文件,从一个干净的状态开始构建项目,确保重新构建的正确性和一致性,如果不指定 clean 参数可能造成项目导入失败。clean 只会清理导入 ZStudio 的项目,不会对用户原有的项目产生影响。
-
当遇到无法处理的非编译命令时,ZStudio 提供以下选项:
- 在下一条编译命令执行开始前执行。
- 在上一条编译命令执行结束后执行。
- 忽略:忽略这些无法判断的命令,不对其进行任何特殊处理。
-
导入过程会为项目生成一些配置文件,用户可以选择"使用项目副本"导入或者"使用原始项目"导入。
- 使用项目副本:此选项将在导入过程中先创建项目副本,所有导入过程生成得配置文件都将被添加至项目副本中,不会影响原始项目,但是导入时间会增加。
- 使用原始项目:如果希望项目快速导入,且不介意导入过程生成的配置文件被添加至原始项目中,可以选择"使用原始项目"。
-
点击"导入",右下角弹窗将提示用户更新项目配置。导入的 makefile 项目可能存在与当前工具链配置不兼容的内容,在 ZStudio 中构建导入的项目前,如需修正不兼容的编译选项,请点击右下角弹窗中的"修复 Makefile 项目"。
用户在命令面板 Ctrl+Shift+P 中搜索并点击"修复 Makefile 项目"可重新调出此弹窗。
提示用户需要参考 ZCC 使用手册 及其他工具链使用手册,修正 ZCC 与 GCC 不兼容的编译选项。
导入成功后,Makefile 项目将在 ZStudio 中加载。
项目跨平台使用可能导致路径兼容问题,Linux
系统使用斜杠(/)作为路径分隔符;而 Windows
系统使用反斜杠(\)作为路径分隔符。建议在导入前在 Makefile
文件中更改路径。也可以导入后使用"修复 Makefile 项目"功能进行修改。
导入 CMake 项目
若要导入 CMake 项目,请遵循以下步骤:
-
在菜单栏选择"文件" > "导入 CMake 项目"。
-
在项目弹窗中,配置 CMake 项目。
- 项目根目录:在文件系统中选择需要导入的 CMake 项目的顶层文件夹。
- CMake 工作目录:此处需要指向执行"cmake"命令,存放生成 CMake 文件的文件夹。推荐使用 build 目录。用户可以在导入前手动在 CMake 项目中创建 build 文件夹。
- CMake 运行参数:此处指定生成项目所需的完整 CMake
参数,ZStudio 使用 Make 作为构建工具,所以需要避免使用
-GNinja
等参数。 - 环境变量:点击 + 添加在导入过程中传给 CMake
的环境变量。环境变量的格式为
HOME=/HOME/username
,使用 = 作为键和值之间的分隔符。
其他设置同导入 Makefile 项目保持一致。
-
点击"导入"并在运行控制台中检查导入进度。
删除解决方案、项目或文件
若要删除解决方案或其他组件,请使用 Windows 中的文件资源管理器删除包含
{solution_name}.zssln
解决方案文件的文件夹。操作方法如下。
-
在解决方案资源管理器中,右键单击要删除的解决方案,在上下文菜单中选择"在文件资源管理器中显示"。
-
在文件资源管理器中,选择包含解决方案的文件夹,然后删除整个文件夹。