大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 MCUXpresso IDE 下添加新路径下源文件进工程编译的方法。

 

接着上篇文章 《MCUXpresso IDE 下 SDK 工程导入与 workspace 管理机制》 接着聊,痞子衡说过不建议从零开始创建新工程项目,最好就是导入一个 SDK 里的现成项目(尽量跟你最终需求相近,主要是需要的 SDK 基础驱动都要包含),然后在这个项目基础上修改成自己想要的最终工程。

 

如果你是一个习惯于 IAR 或者 MDK 这种非 Eclipse 式集成开发环境的用户,你可能会对 MCUXpresso IDE 下管理工程(主要是在工程里增加源文件)的方式感到不适应。本文痞子衡将为你指明 MCUXpresso IDE 下增加源文件让你不适应的地方。

 

一、准备测试环境

上篇文章 《MCUXpresso IDE 下 SDK 工程导入与 workspace 管理机制》 里我们导入了 RT500 的一个 hello world 项目进 workspace 空间,让我们将这个项目拷贝到如下自定义的路径,然后在 MCUXpresso IDE 下使用 Import project(s) from file system 方式并且不勾选 Copy projects into workspace 选项去打开自定义路径下的 hello world 工程。

 

 

为简单起见,我们再创建三组源文件:sw_delay1.c/h、sw_delay2.c/.h、sw_delay3.c/.h,我们会用这三组源文件来测试三种不同路径类型下添加源文件进工程的情况。

 

////////////////sw_delayx.c////////////////
#include "sw_delayx.h"
void sw_delayx(uint32_t n)
{
    while (n != 0U)
    {
        n--;
    }
}

////////////////sw_delayx.h////////////////
#include 
#if defined(__cplusplus)
extern "C" {
#endif
void sw_delayx(uint32_t n);
#if defined(__cplusplus)
}
#endif

 

二、已有路径下添加源文件进工程

第一种测试情况最简单,我们直接把 sw_delay1.c/h 文件放到

 

\mcux_test\evkmimxrt595_hello_world\source\ 路径下,跟主函数源文件 hello_world.c 放在一起。当我们将新源文件放到已有路径下时,在 MCUXpresso IDE 工程里新文件就立刻显示在了界面左上角的 workspace 里(可以理解为直接被添加进工程了),根本不用你手动添加(这是跟 IAR/MDK 相比第一个不同的地方,也是你可能不适应的地方),这时候我们可以在主函数文件里直接引用和调用 sw_delay1.c/h 里的内容,不需要再额外做任何工程设置。

 

 

自动刷新工程路径下源文件进工程是 Eclipse 型 IDE 的特色,这个特色其实挺好,只有一种情况下不太方便,那就是多个不同源文件中均有相同函数定义(可能是测试目的,或者刻意保留不同版本函数实现),这种情况下在工程编译时会报错,需要在 IDE 里主动右击你不想添加进工程的源文件,在 Properties 框里勾选上 Exclude resource from build。

 

 

三、新路径下添加源文件进工程

3.1 在工程文件所在路径下

现在我们换一种情况,还是在当前工程路径 \mcux_test\evkmimxrt595_hello_world 下,但是新建一个名为 sw_delay2 的文件夹,并且将 sw_delay2.c/h 文件放到 \mcux_test\evkmimxrt595_hello_world\sw_delay2\ 路径下。因为有了新路径,此时还需要在工程 Properties 选项的 MCU C Compiler / Includes 里(最好在 MCU Assembler / General 里也同样设置)将该新路径添加进去。

 

 

此时新文件夹 sw_delay2 及其中源文件好像同样被自动更新到了工程 workspace 中,我们试试在主函数源文件中调用 sw_delay2(),并编译工程。很遗憾,工程编译报错,提示 undefined reference to `sw_delay2',就是找不到 sw_delay2()函数,这是为什么?

 

 

这里要介绍第二个让你不适应的地方,那就是工程文件所在路径下的新建文件夹看起来被自动更新显示到工程 workspace 中了,但其实其中源文件并没有真正被添加进工程,还需要你手动做一次路径添加,在工程 Properties 选项的 C/C++ General 的 Paths and Symbols 下做如下操作。做完之后,你可以在 workspace 里看到此时 sw_delay2 文件夹被提到了 Debug 上面显示(在 SDK 工程里,Debug 和 doc 文件夹一般显示在最下面,这两个并没有被真正添加进工程源文件路径,凡是显示在它们后面的文件夹都是没有被真正加入工程的),现在工程可以正常编译了。

 

 

3.2 非工程文件所在路径下

最后介绍一种最复杂的情况,这次不在工程路径 \mcux_test\evkmimxrt595_hello_world 下做文章,我们在 \mcux_test\ 路径下新建一个名为 sw_delay3 的文件夹,并且将 sw_delay3.c/h 文件放到 \mcux_test\sw_delay3\ 路径下。因为这个新路径跟工程路径不相关,因此工程 workspace 没有自动显示它,此时当然需要我们手动来添加这个文件夹进工程。右击工程选择 New / Folder,使用 Folder 选项里 Advanced 下面的 Link to alternate location 功能将 sw_delay3 文件夹及其源文件添加进工程。

 

 

此时工程 workspace 中已经显示了 sw_delay3 文件夹,但是显示在最下面(Debug 和 doc 之后),这时候我们可以当 sw_delay3 文件夹刚刚被放到 \mcux_test\evkmimxrt595_hello_world\ 下面一样,按 3.1 节里的方法走一遍,MCU C Compiler / Includes 和 C/C++ General - Paths and Symbols 下都分别再设置一下。

 

这里有第三个让你不适应的地方,非工程文件所在路径下的源文件夹在被强制链到工程里时,其 Include 路径直接转变成了当前工程路径 /${ProjName}/ 下,并不需要像 IAR/MDK 那样使用 ../ 去回退寻找具体的相对路径。

 

 

至此,MCUXpresso IDE 下添加新路径下源文件进工程编译的方法痞子衡便介绍完毕了,掌声在哪里~~~