Segger Embedded Studio通过项目对应用进行管理,本文将介绍通用的 Embedded Studio 项目文件*.emProject的格式。
项目布局
在Embedded Studio中,项目文件本质上就是解决方案(Solution)文件,因此,它可能包含多个项目(Project)。
基本布局:
<!DOCTYPE CrossStudio_Project_File>
<solution Name= "Project_Example" target= "8" version= "2" >
<project Name= "Project Name" >
</project>
</solution>
一个项目可以包含:
1、文件
<file file_name="RelativePathToFile"/> or <file file_name="RelativePathToFile"></file>
2、虚拟文件夹
<folder Name="Folder Name"></folder>
3、动态文件夹
<folder Name="Folder Name" exclude="Exclude Filter" filter="Include Filter" path="RelativePathToFolder" recurse="Yes|No" />
虚拟文件夹可以包含多个虚拟和动态文件夹以及文件。
所以项目设置可能是:
<!DOCTYPE CrossStudio_Project_File>
<solution Name="Solution Name" target="8" version="2">
<project Name="Project Name">
<folder Name="Src" filter="*.c;*.cpp;*.h;*.s" path="Src" recurse="Yes"/>
<folder Name="Doc>
<file file_name="README.txt"/>
<file file_name="Doc/index.html"/>
</folder>
</project>
</solution>
项目选项
在 Embedded Studio项目中,可以根据构建配置在每个级别上设置项目选项。选项是可以从其上层和配置继承的。
基本标签是:
<configuration name="ConfigurationName" [option="value"]/>
常规的项目定义了调试(Debug)和发布(Release)两种构建配置,并在解决方案级别设置标准选项;
<solution Name="Solution Name" target="8" version="2">
<configuration Name="Debug" c_preprocessor_definitions="DEBUG" gcc_debugging_level="Level 3" gcc_optimization_level="None" />
<configuration Name="Release" c_preprocessor_definitions="NDEBUG" gcc_debugging_level="Level 2" gcc_omit_frame_pointer="Yes" gcc_optimization_level="Level 2 balanced" />
[...]
</solution>
项目的配置包括配置设备的选项,构建选项,调试选项,......有一个配置“Common”,它定义了其他构建配置要继承的默认值,因此这些选项只需要设置一次:
<solution Name="Solution Name" target="8" version="2">
[...]
<project Name="Project Name">
<configuration Name="Common"
Name="Common"
arm_architecture="v7M"
arm_compiler_variant="SEGGER"
arm_core_type="Cortex-M3"
arm_endian="Little"
arm_fpu_type=""
arm_linker_heap_size="1024"
arm_linker_process_stack_size="0"
arm_linker_stack_size="1024"
arm_linker_variant="SEGGER"
arm_rtl_variant="SEGGER"
arm_simulator_memory_simulation_parameter="RX 00000000,00100000,FFFFFFFF;RWX 10000000,00020000,CDCDCDCD"
arm_target_device_name="YourTargetDeviceName"
arm_target_interface_type="SWD"
debug_target_connection="J-Link"
LIBRARY_IO_TYPE="RTT"
link_linker_script_file="Setup/SEGGER_Flash.icf"
link_symbol_definitions="getchar=getchar_rtt;putchar=putchar_rtt;gets=gets_rtt;puts=puts_rtt;printf=printf_rtt;scanf=scanf_rtt;vprintf=vprintf_rtt;vscanf=vscanf_rtt"
linker_output_format="hex"
linker_section_placements_segments="FLASH1 RX 0x00000000 0x00100000;RAM1 RWX 0x10000000 0x00020000"
project_directory=""
project_type="Executable" />
</project>
[...]
/solution>
例如:如果你想将 Release配置中的文件优化级别从“Level 2 balance”(设置在解决方案级别)更改为“Level 2 for size”,则可以参照如下例子进行设置:
<solution Name="Solution Name" target="8" version="2">
[...]
<project Name="Project Name">
[...]
<folder Name="Src">
<file file_name="Src/main.c">
<configuration Name="Release" gcc_optimization_level="Level 2 for size"/>
</file>
[...]
</project>
[...]
</solution>
覆盖项目属性
使用 Embedded Studio时,您可以设置解决方案、项目、文件夹和文件的属性,以配置构建系统和调试行为。属性值可以在属性窗口中设置,该窗口可作为停靠窗口通过 View -> Properties Window 访问,该窗口显示项目资源管理器中当前选定文件的属性值或通过右键单击项目、文件夹或文件项目资源管理器,以显示此元素的属性值。
可以使用私有配置“Common”为所有构建配置设置属性,并为每个构建配置单独设置属性。这些属性按其特定用途分组。属性窗口允许搜索特定属性。并非所有属性都可用于所有类型的元素和项目类型。属性继承自父元素。项目从解决方案继承,一个文件夹从项目继承,一个子文件夹从其父文件夹继承,文件从文件夹继承。
覆盖属性
唯一属性只有一个值。对于每个元素,可以通过为该元素更改来覆盖它继承的唯一属性值。
MySolution Exclude: No - Will be built
MyProject Exclude: No - Will be built
MyFolder Exclude: Yes - Will not be built
MyFile.c Exclude: -- - Will not be built
MyFile1.c Exclude: No - Will be built
MyFolder1 Exclude: -- - Will be built
MyFile.h Exclude: -- - Will be built
MyFile1.h Exclude: Yes - Will not be built
聚合属性
聚合属性是从层次结构中收集的值。对于每个元素聚合值可以扩展。预处理器定义示例:
MySolution Property Value: SolDefine Resulting Definition: SolDefine
MyProject Property Value: PrjDefine Resulting Definition: SolDefine PrjDefine
MyFolder Property Value: FolderDefine Resulting Definition: SolDefine PrjDefine FolderDefine
MyFile.c Property Value: FileDefine Resulting Definition: SolDefine PrjDefine FolderDefine FileDefine
MyFolder1 Property Value: <none> Resulting Definition: SolDefine PrjDefine
MyFile1.h Property Value: File1Define Resulting Definition: SolDefine PrjDefine File1Define
本文仅供参考。我们不建议用户手动修改 Embedded Studio 项目文件。请使用 Embedded Studio GUI更新。