您的位置:首页 > 其它

visual studio 2013上搭建arm交叉编译环境(四)makefile配置及编译过程

2016-03-19 12:51 489 查看
上篇文章已经介绍了cygwin测试工程建立和生成的方法,本文在此工程的基础上,介绍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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息