前言
最近使用SlickEdit进行arm9应用程序的开发,感觉代码编辑、查找、定义跳转、函数引用处查询等功能非常不好用,这可能是由于我之前都是在visual studio(vs)上进行代码的开发的原因,个人感觉作为集成开发环境,VS+VA 进行代码的开发是最方便,最好用的,所以就尝试了下,在visual studio 2013上建立一个arm的交叉编译环境,经过两天的资料查询和调试,终于编译成功。
本人搭建arm交叉编译环境,需要电脑安装如下软件:
1, cgywin
2, visual studio2013(其他版本没有验证)
3, visual gdb
当然VS上也安装了VA助手,此工具非常强悍,没用过的可以自行查询下载visual assist x,此工具瞬间可以让VS好用很多倍。
有关具体的搭建方法,正在整理中,后续会出一个详细的搭建过程,希望能够给感兴趣的朋友一定的参考。下面上一个搭建完成,运行后的截图。有点遗憾,不能在windows下运行断点调试,gcc和g++编译器编译的代码是可以在vs下运行调试的,可能arm编译器差生的调试信息,visual gdb还不能翻译,这里可以作为代码编辑和编译环境还是比SE好用很多的。
Arm9编译器配置:
修改后的makefile
编译结果输出,可看到使用的是arm-unknow-linux-gnu-g++编译器编译成功,可生成APP、Share 库文件、Static 库文件,根据需要修改makefile即可,后续会介绍生成app、so、a文件的方式。
软件安装
安装方法,主要介绍cygwin的安装和cygwin中arm9交叉编译环境的建立,至于vs的安装,visual gdb的安装非常简单,就不做介绍。
一 Visual gdb的安装使用可参考如下文章:
http://blog.csdn.net/wu936754331/article/details/49305377
此文章讲解的方式是visualgdb+vmware的方式,此方式还需虚拟机,比较麻烦,有兴趣的可以研究下,我介绍的方式是使用cygwin。我用的版本是
VisualGDB_5.0_beta2.rar
下载地址:http://download.csdn.net/download/u010144805/10150891
在自己在网上很容易找到安装包和破解文件。
二 visual assist X介绍和使用说明,使用过vs的应该都用过
http://blog.csdn.net/luoweifu/article/details/48852119
安装包和破解方式如下:
下载地址: http://download.csdn.net/download/u010144805/10151056
三sygwin安装和arm9交叉编译的配置
Cygwin是一个在windows平台上运行的类UNIX模拟环境,是cygnussolutions公司开发的自由软件(该公司开发的著名工具还有eCos,不过现已被Redhat收购)。它对于学习UNIX/Linux操作环境,或者从UNIX到Windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用GNU工具集在Windows上进行嵌入式系统开发,非常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对Cygwin产生了兴趣。[1]
Cygwin 提供一个UNIX 模拟DLL以及在其上层构建的多种可以在 Linux系统中找到的软件包,在 Windows XP SP3以上的版本提供良好的支持。Cygwin主要由Red Hat及其下属社区负责维护。
以上是百度百科的介绍,想要深入研究,可上网搜搜,网上很多文章写的都很不错,下面介绍下安装过程。
cygwin软件的安装请参考下文,这个说的比较详细。
http://blog.csdn.net/superbinbin1/article/details/10147421
1, 网上下载安装程序:(https://cygwin.com/install.html),我的是64位win7,下载后文件为setup-x86_64.exe,双击安装程序,点击下一步。
2, 选择installfrom Internet,点击下一步。
3, 选择安装目录,点击下一步。
4, 选择本地保存包目录,就是保存各种安装包文件的目录,点击下一步
5, 需要联网,如果没有代理,直接下一步,如果有代理,请配置。
6, 选择下载源,这里选择:http://mirrors.neusoft.edu.cn,如果没有手动添加,如果连接不上也可以试下如下国内的源:
http://mirrors.163.com/cygwin/
7, 选择下载包列表,空间够网速好的话,可以全部安装,点击all后面Default,会变成install 表示全部安装,如果不需要,可以把Devel 变成install,其他默认,下一步,等待安装结束。
安装结束后,打开cygwin,可在此终端界面进行linux的各种操作,下面介绍下arm9编译器的安装方式,这里仅仅介绍最简单的方式,如需深入了解可参考;
http://blog.csdn.net/chief1985/article/details/4209928
http://blog.sina.com.cn/s/blog_6524fd1f0101mu0g.html
首先下载别人编译好的cygwin交叉编译其包,如果找不到就只能自己编译了,根据自己的平台选择合适的交叉编译包,我使用的是arm9的,网上很多包,下载了一个arm-linux-toolchain-cygwin的包,把包复制到cygwin目录下的一个文件夹中解压,解压后记住解压的路径,配置环境变量,把文件夹下的bin目录加入路径,然后在cygwin终端里,输入g++直接输入编译器全称 -v,我的是arm-unknown-linux-gnu-g++.exe –v 会出下编译器信息,则说并cygwin下交叉编译环境配置好了,可以用此编译器随便编译一个测试代码,看是否正常。
完成编译环境搭建
现在开始介绍在visual studio2013上建立arm9代码编辑和编译的环境。
首先,打开vs2013,file->new->project,在Templates选项卡下选择visualGDB,如果没有此选项说明visual gdb没有安装成功,请重新按章,在此选项卡下选择MinGW/Cygwin Project Wizard,在下面填好项目名称及项目保存路径,点击OK。
进入New MinGW/CygwinProject后,选择Create a new Project,随便选择一个类型,我们只是让其自动产生一个GNU Makefile的模版,后续编译选项和makefile要根据实际使用的编译器和代码进行修改,点击next。
Toolchain选择ManuallyLocate a Cygwin-based tool chain 指定到cygwin的安装路径,点击finished。
等待自动生成测试工程和makefile模版。
生成后的测试工程如下图所示,包含makefile配置文件,debug.mak /release.mak/makefile及测试代码arm9projtest.cpp
右键工程选择proerties,进入属性页面,选择NMake,可以在这里进行相关的配置,比如进行预编译定义,来选择导入的makefile配置文件,可以默认不改,此配置下是debug模式,makefile会自动导入debug.mak的相关定义,所以我们可以删除release.mak文件,反正代码编译都是根据makefile来的,想编译成debug还是release只要修改下g++参数即可,这里我们采用默认的方式。
在Solution中右击工程会发现多出一个visual GDB project properties,打开可一看到visualGDB 的很多配置选项。
这里注意修改一个地方,如果不修改VA是没法用的,如果VA没法用那是很痛苦的事情,修改如下图所示,把Intellisense engine,修改为visual studio intellisense engine:
到此算是把交叉编译工程框架打好了,后面进入makefile修改和生成so、a库及应用程序的介绍。
默认生成的debug.mak配置是使用linux的g++和gcc编译器进行编译的,此编译器cgywin能够很好的支持和转换,因此可以直接在vs2013下运行和断点调试,如果仅仅是开发linux代码,使用这种方式开发是非常方便的,可以不需要改写任何东西,只需要通过此方式建立工程后,删除测试代码,add自己的代码到工程里后,直接build,即可生成运行文件,可按F5直接运行,单步断点调试都可以用。
makefile修改及编译
debug.mak是makefile的配置文件,此文件通过makefile中如下语句导入到makefile中,作为makefile特定变量的定义文件。
下面是debug.mak文件,应该很容易理解。
#DO NOT EDIT THIS FILE MANUALLY UNLESS YOU ABSOLUTELY NEED TO
#USE VISUALGDB PROJECT PROPERTIES DIALOG INSTEAD
# BINARYDIR编译产生的文件及目标文件路径,这里在当前文件的Debug目录中
BINARYDIR := Debug
#下面是编译器的选择
#Toolchain
CC := D:/cygwin64/bin/gcc.exe
CXX := D:/cygwin64/bin/g++.exe
LD := $(CXX)
AR := D:/cygwin64/bin/ar.exe
OBJCOPY :=
#下面是头文件包含路径及依赖库目录及名称
#Additional flags
PREPROCESSOR_MACROS := DEBUG
INCLUDE_DIRS :=
LIBRARY_DIRS :=
LIBRARY_NAMES :=
ADDITIONAL_LINKER_INPUTS :=
MACOS_FRAMEWORKS :=
LINUX_PACKAGES :=
#编译参数的配置
CFLAGS := -ggdb -ffunction-sections-O0
CXXFLAGS := -ggdb -ffunction-sections-O0
ASFLAGS :=
LDFLAGS := -Wl,-gc-sections
COMMONFLAGS :=
这里我们需要采用arm9的编译器,因此只需把Toolchain按照如下方式修改:
#Toolchain
CC := D:/cygwin64/arm-cross/usr/bin/arm-unknown-linux-gnu-gcc.exe
CXX :=D:/cygwin64/arm-cross/usr/bin/arm-unknown-linux-gnu-g++.exe
LD := $(CXX)
AR := D:/cygwin64/arm-cross/usr/bin/arm-unknown-linux-gnu-ar.exe
此处修改完后,编译时就会使用此处定义的编译器进行代码编译。
有关编译参数的配置,根据自己需要在addition flag中配置,我的参数配置如下:
#Additional flags
PREPROCESSOR_MACROS := NDEBUG RELEASE
INCLUDE_DIRS := ../../../include
LIBRARY_DIRS :=
LIBRARY_NAMES :=
ADDITIONAL_LINKER_INPUTS :=
MACOS_FRAMEWORKS :=
LINUX_PACKAGES :=
APPOUTPUT_PATH := ../../../output
CFLAGS := -Wall -Wextra -ffunction-sections -O3
CXXFLAGS := -Wall -Wextra-ffunction-sections -O3
ASFLAGS :=
LDFLAGS := -Wl,-gc-sections
COMMONFLAGS :=
配置完成之后,直接build工程,即可查询编译结果。
Makefile文件系统会根据debug.mak的配置及源文件的变动自动重新生成后再执行make,所以在工程中添加和删除源文件,不需要修改makefile,只需要重新编译即可。
Makefile中如下定义,是定义输出文件文件名称和输出文件类型。
TARGETNAME := arm9projtest
#TARGETTYPE can be APP, STATIC or SHARED
TARGETTYPE := APP
APP及生成可执行二进制文件,生成的文件可以直接在arm板终端下运行,如上定义最终将在Debug下生成arm9projtest。
如果源文件需要生成动态库.so,可按照如下配置,当然代码中要包含对外输出接口。
TARGETNAME := arm9projtest.so
#TARGETTYPE can be APP, STATIC or SHARED
TARGETTYPE := SHARED
静态库的生成,修改makefile如下:
TARGETNAME := arm9projtest.a
#TARGETTYPE can be APP, STATIC or SHARED
TARGETTYPE := STATIC
至此arm9的开发编译环境已经介绍完了,后面介绍下,如何快速建立工程,把以前的代码移植到vs上。
首先我们按照上述方式建立一个测试工程,配置好编译环境。
然后从vs工程中删除测试代码,添加我们自己的代码到工程中。
最后在Makefile中修改目标名称和目标类型,重新编译,即可生成我们自己的目标文件。
如果开放项目比较大,有很多个工程需要建立,这里介绍一个便捷的方式。
1,把配置好的工程文件夹复制一份,把文件夹名称修改为新的工程名称,例如:员工称文件夹为arm9projtest,复制一份修改为aaa1。
2,进入aaa1,保留如下文件其余都删除,这里我用的是debug.mak,如果建立工程使用的配置为release.mak请保留release相关的文件。
3,把文件命中arm9projtest都改为aaa1。
4, 选择arm9projtest.vcxproj文件,用文本编辑器打开,把如下内容修改一为aaa1,绿色标注的两个地方:
5,打开VS 工程,选择Solution右击->ADD->ExistingProject 选择我们修改的工程arm9projtest.vcxproj,添加到Solution中。
删除掉工程的源文件,添加自己的源文件到工程中,修改makefile目标名称和目标类型,然后编译即可。
下面截图是我的整个项目工程的搭建结果:
再说下编译依赖库及文件路径的配置的地方,在debug.mak文件中:
INCLUDE_DIRS:= ../../../include
LIBRARY_DIRS:= ../../../output
LIBRARY_NAMES:= arm9eisuv2link arm9eisuv2analysexml arm9eisuv2public
有关清理可能会报错,清理不掉,可以在makefile中做如下修改:
clean:
#ifeq ($(USE_DEL_TO_CLEAN),1)
#del /S /Q $(BINARYDIR)
#else
rm -rf $(BINARYDIR)
#endif