)
最近我在github上下载了一个stm32项目工程文件一个项目文件能够支持多款CPU它的做法如下所示第一步在Manage Project Items中的Project Targets中创建多个目标每一个目标可以创建各自的文件夹各自的文件夹可以导入各自需要的源文件这是没有什么疑问的。值得注意的是当前项目各个目标创建的文件夹以及文件夹中的文件都是一样的尤其是CORE文件夹中包含多个CPU各自需要的启动汇编文件如下所示这样完成后我们就得到了6个目标每一个目标对应各自文件夹和文件。下一步就是每一个目标指定对应的芯片以及头文件路径等如图所示这样配置好之后如果直接编译是会提示很多报错的原因很明显因为CORE文件夹中有多个相同功能的启动汇编文件。解决方法有两种一种就是将多余的启动文件删除掉第二种办法就是使用keil MDK能够支持每一个文件指定是否包含在目标中的操作。然后去掉复选框“Include in Target Build”这样选项这样文件就有了交通上的“禁止驶入”标志。这样CORE文件夹包含了多余启动汇编文件但是因为配置“不包含”所以也不会变成成目标文件。注意去除复选框“Include in Target Build”后下面的另外一个复选框“Always Build”的三种状态空、灰色选中、实色选中都不起作用文件图标上都是“梅花禁止驶入”标志。所以图标上的“禁止驶入”标志优先级很高禁止驶入的意思就是文件不包含在项目中。2图标上的“梅花”标志梅花标志当“Always Build”空选或者实选时都能显示只有虚选时不显示梅花标志有没有梅花标记文件都会被编译成目标文件有没有梅花标志的区别是否支持重定位。有梅花标志的文件里面声明的全局变量和函数可以在多个没有梅花标志的文件中定义这些全局变量和函数定义重名但是编译不报错这就叫重定位。没有梅花标志的文件里面声明的全局变量和函数只能在一个没有梅花标志的文件中定义。参考文章keil文件出现雪花去除雪花以及雪花的作用_keil工程文件有个雪花-CSDN博客https://blog.csdn.net/weixin_60324241/article/details/143650602总结禁止驶入的那个选项尤其是空选时起的“不被包含编译”起的作用最大至于梅花标志的那个选项以及对应的重定位作用我们在keil使用过程中使用不多因为keil MDK项目使用最多的就是“全局变量和公共函数在整个项目中只有一处定义”。