用SlickEdit 编译 MDK4 项目

目标

这里说明一下,这里说的 “编译 MDK4项目”是指在SlickEdit项目中加入与MDK4项目相同的源文件进行编译。在调试的时候还是需要用MDK再编译一遍,然后再进行调试的。

相对于SlickEdit来说,MDK的编辑环境实在是不够自动化,为了提高工作效率,我希望能用SlickEdit来完成代码的编辑,编译工作。在AVR上我就是这么干的。由于AVR支持使用Makefile来管理工程,因此可以通过让SlickEdit使用MakeFile的方式来编译AVR的工程文件。但是到了MDK这边,由于MDK不支持Makefile,因此这条路变得非常难走。

参考了http://blog.csdn.net/xuzhenglim/article/details/7232157 的博客,可以尝试完成了编译工作。感谢 博主。

MDK 的设置

由于VS在链接的时候输入的文件名只能使用%f,也就是说是 Debug/x.o 的形式,应此为了能满足这个要求,就要求MDK的输出文件目录一定是 ./Debug. 可以在Output页面中进行设置。这点非常重要。如果不这样设置的话,会导致VS在链接的时候找不到目标文件。

VS的编译过程以及设置原理

VS的内置变量

    在这里先记录一下VS的内置变量。

       %rp工程路径

       %rn 工程名

       %rw 当前工作目录

       %n文件名(不带文件路径和类型后缀)

       %f文件名(类型后缀)

       %bd 配置文件夹(比如debug\release

       %(环境变量名)这个很重要,很多环境都是这样掉用的

       %i 工程包含的所有路径,会自动扩展成 -I path1 -I path2

       %defd 工程的所有宏定义变量 

       %libs 所有工程定义的库

VS的的编译过程

为了说明VS默认的编译过程,建立一个空的VS项目文件。为了测试,可以加入一个c文件,里头只有一个空的main函数。

之后就是需要准备vsbuild 所需要的一些参数了。

在VS中,Build命令实际上就是执行它的 Command line 里头的参数。默认情况下的参数是

"%(VSLICKBIN1)vsbuild" build "%w" "%r"。
如果是在AVR项目里头,就执行 Make clean --F Makefile; make --F Makefile

在Rebuild 命令下则 是

"%(VSLICKBIN1)vsbuild" rebuild "%w" "%r"
vsbuild会根据输入的参数进行编译。为了便于调试,建议大家在这个命令中加入 -v参数。这样在编译或者链接出错的时候可以知道使用了哪些参数,便于调试。

在vsbuid执行build命令的时候,他会依次为项目中的每个文件执行compile命令,当compile命令都执行完成后,再执行一次link命令。

因此,我们需要设置这个项目的Build Target和 Link Targe就可以完成所需要的功能了。

用文本编辑器打开项目的.vpj文件,可以发现这是一个xml格式的文件。在Project节点下有两个Config 子节点。从名字上很容易看出来一个是Debug用的,另外一个是Release用的。对于我们只求编译和编辑的使用目标来说,我们可以删掉Release这个节点,这样就只需要设置一个编译配置就行了。

在 Menu节点下面,都有几个Target节点,这些Target就是Build菜单下的那些菜单项。其中的 EXEC 节点就是这个菜单项对应的动作。

环境变量的设置

首先需要指定编译器的路径和库文件的路径。在Config节点下加上设置变量的代码

        <Set
            Name="MDKARM"
            Value="C:\Keil\ARM\ARMCC\bin\"/>
        <Set
            Name="MDKARM_LIB_PATH"
            Value="C:\Keil\ARM\ARMCC\lib"/>
在下面的命令中就可以用 %MDKARM和%MDKARM_LIB_PATH来指明编译器和库文件的路径了。当然,更高级一点的做法是把cc定义成一个变量。在后续的版本中再改吧。今天的目标就是编译,链接。
        如果在编译时发现设置的环境变量不管用,那就直接把环境变量插入到命令行中吧。我尝试了两个文件,一个管用,另外一个不管用,也不知道是什么原因。反正就插入一次,丑陋就丑陋一点把。

Compile设置

对于默认的VS项目来说,Comiple 命令就是 <Exec CmdLine='cc -c -g %i %defd -o "%bd%n.o" "%f"'/>,也就是调用系统的cc编译器,进行编译。为了达到我们所希望的使用MDK的arm编译器来编译源文件的目标,我们需要修改这里头的命令行。首先需要指定编译器的路径(其实不指定也没有关系,在命令行中加路径也是可以的),然后需要根据编译的目标配置需要的编译参数。这需要查阅 armcc的参数。目前可以使用如下参数进行编译。

                 <Exec CmdLine='%(MDKARM)\armcc -c --cpu Cortex-M3 -g -O2 --apcs=interwork %i %defd -o "%bd%n.o" --omf_browse "%bd%n.crf" --depend "%bd%n.d" %f'/>

编译的头文件的目录去哪里找呢?

        <Includes>
            <Include Dir="%rpCMSIS/INC"/>
            <Include Dir="%rpStm32Lib/INC"/>
            <Include Dir="%rpUsr/INC"/>
        </Includes>

                 其实armcc的命令选项完全可以参考MDK给出的命令选项。如果想偷懒的话,直接把 Options for Target 'xxxx' 对话框中的C/C++页面下的Compile control string 复制过来,把命令选项填在 armcc 后面作为命令参数即可。

               在替换时要注意:

               1. 要保留原来的命令行后面的 %f, 这是输入的文件名称

               2. 要把命令行中的 -o  --omf_browse  --depend  中的 * 替换为 %n,这样VS在编译时会自动把源文件名插入到*的位置。

                3. 把命令行中的 -o后面的参数改为 %bd\%n

                替换后的命令行如下:(红色字体为替换后的部分)

C:\Keil\ARM\ARMCC\bin\\armcc -c --cpu Cortex-M3 -D__MICROLIB -g -O3 --apcs=interwork --split_sections -I..\..\inc\AN3964-Temperature_sensor -I..\..\source\Plf\STM32L1xx\Inc -I C:\Keil\ARM\RV31\INC -I C:\Keil\ARM\CMSIS\Include -I C:\Keil\ARM\Inc\ST\STM32L1xx -DUSE_STDPERIPH_DRIVER -DSTM32L1XX_MDP -o "%bd\%n.o" --omf_browse "%n.crf" --depend "%n.d"  %f


COMPOLESTRING


Link设置

对于默认的Link命令,所执行的命令行参数就是 <Exec CmdLine='cc -g -o "%o" %f %libs'/>

MDK的目标Link命令就是

                <Exec CmdLine='%(MDKARM)\armlink --cpu Cortex-M3 --libpath=%(MDKARM_LIB_PATH) --strict --scatter "%rpStartUp\%rn.sct" --summary_stderr --info summarysizes --map --xref --callgraph --symbols --info sizes --info totals --info unused --info veneers  --list "%bd%rn.map" -o "%bd%rn.axf" %f %libs '/>


Link的命令行参数也可以从 MDK中复制过来,需要修改的地方如下:

1. 删除其中的 *.o, 用 %f 替换掉。

替换完成后的命令行如下:(红色字体为替换后的部分)

<Exec CmdLine='C:\Keil\ARM\ARMCC\bin\\armlink --cpu Cortex-M3 %f --library_type=microlib --strict --scatter "Debug.sct" --summary_stderr --info summarysizes --map --xref --callgraph --symbols --info sizes --info totals --info unused --info veneers  --list ".\STM32L-Discovery\Debug.map" -o Debug.axf %libs '/>

VS中只能使用 %f作为输入的文件名,不能使用%n,这就导致了输出目录必须是 Debug,否则就找不到链接文件。由于这个原因,在设置MDK时,需要约定输出目录只能是 ./Debug。

汇编文件的编译

compile中只指定了c和cpp文件的编译规则。在Arm的项目中会有汇编文件,这需要指定新的规则。在VS的项目中,可以使用Rule节点来规定某种后缀名文件所需要的编译规则。

    <Rules Name="Compile">
        <Rule
            InputExts="*.s"
            OutputExts="*.o"
            LinkObject="1">
            <Exec CmdLine='%(MDKARM)\armasm --cpu Cortex-M3 -g --apcs=interwork %i --list "%bd%rn.lst" --xref -o "%bd%n.o" --depend "%bd%n.d" %f'/>
        </Rule>
    </Rules>

   和 Compile命令一样,可以直接从MDK的命令行参数中把参数复制过来,需要替换的地方也是一样的。

   替换完成后的命令行如下:

<Exec CmdLine='C:\Keil\ARM\ARMCC\bin\\armasm --cpu Cortex-M3 -g --apcs=interwork --pd "__MICROLIB SETA 1" -I C:\Keil\ARM\RV31\INC -I C:\Keil\ARM\CMSIS\Include -I C:\Keil\ARM\Inc\ST\STM32L1xx --list ".\STM32L-Discovery\%n.lst" --xref -o "%bd\%n.o" --depend "%n.d"   "%f"'/>


最后把MDK项目中的文件加入到 VS项目中。可以用Build命令编译。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
SlickEdit 16 是一个集成开发环境(IDE)工具,它为开发者提供了丰富的功能和工具来提高他们的软件开发效率。 首先,SlickEdit 16 提供了多种编程语言的支持,如C、C++、Java、Python和JavaScript等,使开发人员可以在一个统一的界面中开发不同的应用程序。这样,开发者可以轻松地切换和跳转到不同的源代码文件,并且可以在代码编辑过程中获得自动补全、代码提示和语法高亮等功能,从而减少了开发中的错误和提高了他们的工作效率。 此外,SlickEdit 16 还提供了强大的代码导航功能。开发者可以使用快捷键或通过简单的搜索来查找代码中的特定函数、变量或类等。这个功能使得开发人员可以快速地定位和跳转到他们需要的代码区域,从而节省了他们的时间和精力。 除了基本的代码编辑和导航功能外,SlickEdit 16 还提供了一些高级功能来改善开发过程。例如,开发者可以使用内置的调试器来调试他们的代码,并查看变量的值、设置断点等。此外,SlickEdit 16 还支持版本控制系统,如Git和SVN,使开发者可以轻松地管理和协作他们的代码。 总的来说,SlickEdit 16 是一个功能强大的集成开发环境工具,它提供了丰富的功能和工具以提高开发者的软件开发效率。无论是代码编辑、导航还是调试和版本控制,SlickEdit 16 都可以帮助开发者更好地完成他们的工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值