3 Projects Overview
3.1 Introduction
Workbench 将项目用作可以链接在一起以创建软件系统的逻辑容器。
项目资源管理器允许您直观地将项目组织成反映其内部依赖关系以及编译和链接顺序的结构。
各种项目类型的预配置模板使您能够使用需要最少输入的向导创建或导入项目。
3.2 Specifying Project Locations
当您创建一个新项目时,Workbench 会在您的工作空间中创建一个同名目录。
对于 Wind River Linux 平台项目,Workbench 使用项目名称和 _prj 扩展名创建一个附加目录。
项目目录的默认位置是您的工作区。但是,您可以从以下选项中进行选择,以指定项目位置。
Create project in workspace
此默认选项在当前工作区目录中创建一个项目。 当以下条件适用时,此位置是可取的:
-没有现有资源的从头开始创建的项目。
-稍后将导入现有资源的项目(有关详细信息,请参阅 7.2 Adding Resources and Files to Projects, p. 71)。
-您没有源文件位置写入权限的项目。
Create project at external location
在以下情况下,建议使用此选项:
-正在为现有资源设置项目,从而不再需要稍后导入或链接到它们。
-受版本控制的项目,其中源位于工作区之外。
Create project in workspace with content at external location
如果不想将项目文件与源混合,或不想将源复制到工作区中,建议使用此选项。这在以下条件下是可取的:
-您没有源文件位置写入权限的项目。
-团队成员拥有自己的项目但共享通用(有时是只读)源文件的项目。此选项消除了在您可以在 Workbench 中使用它们之前创建指向外部文件的符号链接的需要。
注意: 如果您使用以前版本的工作台创建了工作区,则必须更新工作区结构,然后才能使用当前版本的工作台打开它。
此时会出现一个对话框,通知您此更新可能会使其与以前的版本不兼容;单击“确定”更新并打开工作区,或单击“取消”选择其他工作区。
3.3 Creating New Projects
所有应用程序代码都由一种或另一种类型的项目管理。您可以在任何位置创建项目,但在大多数情况下,它们是在工作区目录中创建的,如 3.2 Specifying Project Locations, p. 25 中所述。本节向您展示如何通过以下方式创建新项目:
- 使用 The Wind River Workbench 新建项目向导。
- 使用演示示例项目。
- 导入现有项目作为新项目的基础。
当您在工作区之外创建项目时,您必须在外部位置具有写入权限。您必须具有写入权限,因为 Workbench 项目管理文件必须写入项目目录中。您可以使用 Workbench 创建新项目以及来自已安装示例的项目,如以下任务中所述。
To create a project using the new project wizard, do the following:
1. 选择 File > New > Wind River Workbench Project。The Wind River Workbench 的新项目向导将会出现。您可以通过按 F1(Windows 上的帮助键)从向导访问上下文相关帮助。
2. 选择一个 Target operating system 从下拉菜单中,然后单击下一步。
3. 从下拉菜单中选择一个 Build Type,然后单击下一步。
您可能会看到不同的项目类型,具体取决于您安装的软件,如 in 3.4 Project Types, p. 28 中所述。
平台开发人员可以访问内核源代码和内核工具,而应用程序开发人员则不能。
4. 输入独一无二的项目名称,为位置指定以下选项之一:
- Create project in workspace
- Create project in external location——Browse 到工作区之外的位置,选择文件夹,然后单击确定。
- Create project in workspace with content at external location——Browse 到工作区外的位置,选择文件夹,然后单击确定。
5. 单击完成。
您的新项目出现在 Project Explorer 中。
注意:The Advanced Device Development 透视图提供了在 File > New 下拉菜单上创建常用项目类型的快捷方式。
To create a demonstration sample project, do the following:
1. 选择 File > New > Example。
2. 使用新建示例向导进行选择。每个示例项目都有说明程序行为的说明。
To create a new project by importing an existing project, do the following:
1. 选择 File > Import。
2. 导航到现有的 Workbench 兼容项目并选择它。
3. 有关详细信息,请参阅 Import 对话框的联机帮助。
3.3.1 Modifying Project Settings
创建项目后,您可以修改项目创建向导设置。
To modify existing project settings, do the following:
1. 在项目资源管理器中,右键单击要修改的项目。
2. 选择 Properties。
3. 根据需要修改选择。有关详细信息,请参阅 9.4 Accessing Build Properties, p. 107。
您还可以修改项目结构设置,例如项目的子项目和超项目上下文。
To modify subproject and superproject settings, do the following:
1. 右键单击项目文件夹。
2. 选择 Project References > Add as Project Reference。
3. 选择另一个项目作为超级项目。
To view all references for a project, do the following:
1. 右键单击项目文件夹。
2. 选择 Project References > Show Project References。
To remove project references, do any of the following:
1. 右键单击项目文件夹。
2. 选择以下选项之一:
- Project References > Remove Super Project References
- Project References > Remove Sub Project References
- Project References > Remove All Project References
3.4 Project Types
您可以使用 Workbench 创建、修改、执行和调试以下类型的项目:
- Linux-Specific Projects
- VxWorks-Specific Projects
- User-Defined Projects
- Native Application Projects
以下部分提供了这些项目类型的介绍性描述。
请参阅 5. Creating Native Application Projects 和 6. Creating User-Defined Projects 以获取有关本机应用程序和用户定义项目的更多信息,有关 Linux 和 VxWorks 特定项目的详细信息,请参阅 Wind River Workbench By Example 的相应版本。
注意:对于 VxWorks 6.5.3,本指南中讨论的 VxWorks 项目类型不适用。
3.4.1 Linux-Specific Projects(略)
3.4.2 VxWorks-Specific Projects
VxWorks 项目在 Wind River Workbench By Example (VxWorks Version) 中有完整描述。
VxWorks Image Project
使用 VxWorks 映像项目来配置(自定义/缩放)并构建 VxWorks 内核映像来引导您的目标。
通过添加 VxWorks ROMFS 文件系统项目和内核模块、应用程序、库和数据文件,您可以将完整的系统链接到单个映像中。
新的 VxWorks 映像项目可以基于相同类型的现有项目,也可以基于板级支持包。
VxWorks Source Build Project
使用 VxWorks Source Build 项目来重建默认的 VxWorks 库,以包括对平台附带的产品的支持(例如,网络产品或安全产品)。
这个项目也是排除不需要的组件以使 VxWorks 内核映像更小的方法。
一旦您配置了 VxWorks Source Build 项目以满足您的需求,基于它的 VIP 将包含这些自定义。
VxWorks Boot Loader/BSP Project
使用 VxWorks Boot Loader/BSP 项目创建 VxWorks 引导加载程序(也称为 VxWorks 引导 ROM),以使用 VxWorks 内核引导加载目标。
您还可以使用这种类型的项目将现有 BSP 的源代码复制到您的项目中,然后在不更改 VxWorks 安装树的情况下自定义它们。
引导加载程序在开发环境中用于加载存储在主机系统上的 VxWorks 映像,可以快速修改和重建 VxWorks。
引导加载程序也用于引导加载程序和操作系统映像都存储在磁盘上的操作系统。
存储在ROM中的独立VxWorks系统不需要引导加载程序。
VxWorks Downloadable Kernel Module Project
使用 Downloadable Kernel Module 项目来管理和构建将存在于内核空间中的模块。
您可以在运行 VxWorks 的目标机上单独构建模块、运行和调试它们,动态加载、卸载和重新加载。
一旦您的开发工作完成,模块可以静态链接到内核中,或者如果存在文件系统,它们可以使用文件系统。
下图说明了目标上没有文件系统的情况。
内核模式开发是传统的 VxWorks 开发方法。
您生成的所有任务都在未受保护的环境中运行,并且都可以完全访问系统中的硬件。
链接到内核的可下载内核模块是一个可启动的应用程序,在目标机启动时启动。
VxWorks Real-time Process Project
使用VxWorks实时进程项目来管理和构建将存在于内核空间之外的可执行文件。
您可以单独构建、运行和调试可执行文件。
在运行时,可执行文件被下载到一个单独的进程地址空间,作为一个独立的进程运行。实时进程二进制文件可以存储在目标端文件系统上,例如 ROMFS。
下图显示了可执行文件在加载到实时进程时如何作为独立于内核的实体运行。
VxWorks Shared Library Project
将 VxWorks 共享库项目用于在运行时动态链接到 VxWorks 实时进程项目的库。
与 Real-time Process 项目一样,您需要将共享库存储在目标端文件系统上,您可以使用 VxWorks ROMFS 文件系统项目创建该文件系统。
您还可以使用 VxWorks 共享库项目来创建在构建时静态链接到其他项目类型的子项目。
VxWorks ROMFS File System Project
将 VxWorks ROMFS 文件系统项目用作任何其他需要目标端文件系统功能的项目类型的子项目。
因此,例如,您可能不需要用于可下载内核模块项目的文件系统项目(可以直接链接到 VxWorks 内核),但您需要为其他项目类型创建一个文件系统项目。
此项目类型旨在将任何类型的应用程序和其他文件与 ROMFS 文件系统中的 VxWorks 系统映像捆绑在一起。
除了用于VxWorks引导映像的存储介质之外,不需要存储介质。
因此,不需要其他文件系统来存储文件; 系统可以完全正常运行,而无需使用本地或 NFS 驱动器、RSH 或 FTP 协议等。
注意:名称 ROMFS 与 ROM 介质无关。 它代表只读内存文件系统。
3.4.3 User-Defined Projects
用户定义的项目不使用 Workbench 构建支持或预配置功能。它们可以是任何东西。由您来组织和维护构建系统、目标文件系统内容、makefile 等等。
用户界面提供以下支持:
- 配置用于启动构建实用程序的构建命令。 这允许您从 Workbench GUI 开始构建。
- 在 Project Explorer 中创建反映 makefile 中规则的构建目标。这允许您直接从 Project Explorer 中选择和构建任何 make 规则。
- 在构建控制台中查看构建输出。
您可以根据已定义的特定项目指定项目树结构和项目引用,然后将其作为子项目引用。用户定义项目的 makefile 仍然可以使用构建规范中的值,以帮助设置正确的交叉编译工具链和架构。参见 6. Creating User-Defined Projects 以获取有关使用此类项目的详细信息。
3.4.4 Native Application Projects
本机应用程序项目是为您的主机环境开发的 C/C++ 应用程序。Workbench 为本机 GNU 2.9x、GNU 3.x 和 Microsoft 开发实用程序(汇编器、编译器、链接器、存档器)提供构建和源代码分析支持。Workbench 中没有针对此类项目的调试器集成,因此您必须使用适当的本机工具进行调试。有关构建本地应用程序项目的更多信息,请参见 5. Creating Native Application Projects。
3.5 Structuring Projects
所有单个项目都是独立的单元,与任何其他项目没有内在关系。 该系统最初是扁平的和非结构化的。 但是,您可以在 Workbench 中构建项目引用的层次结构。 这些层次结构反映了项目间的依赖关系,因此也反映了构建顺序。
3.5.1 Adding Subprojects and Superprojects to a Project
子项目显示为其父项目(超级项目)的子节点;示例参见后面的图
Workbench 根据项目类型和目标操作系统验证子项目/超项目关系。它不允许您创建某些组合。例如,一个实时处理项目不能是VxWorks映像项目(VIP)的直接子项目,但可以将其添加到ROMFS文件系统项目中。通常,用户定义的项目可以是具有兼容目标操作系统的任何其他项目的子项目或超级项目。
To add a subproject, do the following:
1. 在项目资源管理器中,右键单击要制作成子项目的项目,然后执行以下操作之一:
- 选择 Project References > Add as Project Reference。
- 选择 Project > Add as Project Reference。
2. 从对话框中出现的项目列表中,选择一个或多个项目作为超级项目。
To add a superproject, do the following:
1. 在项目资源管理器中,右键单击要创建为超级项目的项目,然后选择 Properties. > Project References。
2. 从对话框中出现的项目列表中,选择一个或多个项目作为子项目。
3.5.2 Removing Subprojects
您可以使用以下任务撤消子项目和超级项目关系。
To remove a subproject relationship, do the following:
1. 在项目资源管理器中,选择要删除其关系的子项目。
2. 选择 Project > Remove Project Reference。
To remove a superproject relationship, do the following:
1. 在项目资源管理器中,选择超级项目并选择 Project > Properties。
2. 选择 Project References,然后取消选择要与父超级项目解除关联的子项目。
3.5.3 Project Structures and Host File System Directory Structure
一棵目录树的顶部只有一个 Workbench 项目;所有子目录会自动被包括在这个项目。不要试图通过为树中的子目录创建项目来创建项目层次结构。 这将导致项目重叠,这是不允许的。下图说明了一个理想的主机文件系统目录结构。
注意:该示例来自 VxWorks,但本节同样适用于 Linux
左侧的此平面系统映射到右侧显示的项目结构,这也代表了理想的(推荐的)基本项目结构,但您可能不需要所显示的所有项目类型。
To create a project structure similar to Figure, do the following:
1. 为左侧的每个目录创建一个项目。
2. 在项目资源管理器中,选择单个项目。
3. 按照 6.6.1 Adding Subprojects to a Project, p. 52中的说明,创建适合您需求的项目结构。
3.5.4 Project Structures and the Build System
如上图所示,项目结构是逻辑的,而不是物理的层次结构。这些层次结构定义并反映了项目之间的内部依赖关系,因此也定义了它们必须构建的顺序。
注意:本节中有关构建和构建系统的所有参考都假定您的项目使用 Workbench 构建支持。您的用户自定义的项目不会自动包含在这些描述中,尽管可以将自定义项目集成到这样的系统中。
下图说明了此项目结构中的构建顺序。
构建从结构的顶部开始,递归检查每个分支中的依赖关系,并在每个叶子上构建所有过时的对象和目标,直到它在树的顶部完成。假设图中的所有内容都需要构建,则构建顺序如下:
3.5.5 Project Structures and Sharing Subprojects
项目结构可以共享子项目。 也就是说,单个物理项目可以被任意数量的逻辑项目结构引用。子项目或其元素的任何更新或构建的产品将可用于引用该子项目的项目结构。
3.5.6 Customizing Build Settings for Shared Subprojects
单个文件系统文件夹可以导入多个逻辑项目结构,显示为每个项目的子项目。在每种情况下,您都可以根据每个项目的要求分配不同的构建规范 (称为构建规范)。在同一个项目中,一个文件夹还可以被分配多个不同的构建规范。之后,当您为整个项目设置特定的活动构建规范时,分配了相同构建规范的子文件夹将包含在构建中,而其他分配不同构建规范的子文件夹将被排除在外。请参阅 ***10.5 Implementing Architecture-Specific Functions, p. 125***的示例。
3.6 Project-Specific Execution Environments
您可以为每个项目维护不同的构建和外部工具执行环境。Workbench 允许您在每个项目中创建一个 project.properties 文件,该文件定义应该使用的工具、工具版本和环境变量设置。你可以和你的团队共享 project.properties 文件以保持一致性。你还可以将 project.properties 文件与其他项目文件一起添加到源代码管理中。
注意: 当与团队共享文件,或者从共同位置访问文件时,最好使用路径变量而不是绝对路径,因为每个团队成员到该位置的路径可能不同。
To create a project.properties file for a project, do the following:
1. 在项目资源管理器中,右键单击一个项目并选择 new > file。
2. 在 “新建文件” 对话框中,执行以下操作之一:
- 要创建新文件,请在文件名字段中输入 project.properties,然后单击完成。
- 要链接到现有 project.properties 文件的话:
i. 点击 Advanced, 选择 Link to file in the file system。
ii. 导航到文件,或通过单击 Variables > New 来定义路径变量,然后为路径变量键入名称,导航到变量表示的位置,然后单击确定两次。
iii. 点击确定。
新的 project.properties 文件将会出现在 Project Explorer 中您的项目下,在编辑器中打开它,以便您可以添加或编辑其内容。
project.properties 文件使用与 wrenv 使用的其他属性文件(例如 install.properties 和 package.properties)相同的语法。
作为您可以指定的示例,以下行定义了 workbench 包的扩展,将变量 PROJECT_CONTEXT 添加到环境中,值为 set:
To find the information to create your own extension, do the following:
1. 通过在 Project Explorer 中查看项目名称的右侧来找到项目平台(例如,它可能显示为 VxWorks 6.6)。
2. 打开您的 installDir/install.properties 文件并查找列出平台信息的部分。这是您为了标识您要扩展的包所必须包含的类型、子类型和其他信息。
每当您在项目中构建目标时,Workbench 都会使用此文件中指定的项目属性。
3. 要从命令行应用项目属性,请在调用 wrenv 时为 project.properties 和 install.properties 文件包括 -i 选项。
-i installDir/install.properties -i installDir/workspace/myproject/project.properties
在这两种情况下,make 的环境都被更改为包含文件中指定的环境和属性。
3.6.1 Using a project.properties file with a Shell
Project > open shell 菜单项还利用了 project.properties 文件中指定的设置。此操作是上下文相关的,因此打开的 shell 会设置所选项目平台的环境,加上属性文件中的扩展名(如果存在的话)。如果你在打开shell之前未选择项目,则会出现一个对话框,其中包含您可以选择的环境。
3.6.2 Limitations When Using project.properties Files
project.properties 文件为项目创建扩展,这意味着它可以包含新工具、定义变量和指定版本。
但它不能排除已包含的内容,或覆盖现有变量,或撤消在您尝试扩展的属性中设置的 PATH 设置。
您不能将 project.properties 文件用于本机应用程序项目,因为它们没有与之关联的包,因此无法进行扩展。