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

时间:2022-08-31 16:42:03

        上篇文章已经介绍了cygwin测试工程建立和生成的方法,本文在此工程的基础上,介绍makefile修改及编译过程。

 debug.mak是makefile的配置文件,此文件通过makefile中如下语句导入到makefile中,作为makefile特定变量的定义文件。

visual studio 2013上搭建arm交叉编译环境(四)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工程,即可查询编译结果。

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

 

Makefile文件系统会根据debug.mak的配置及源文件的变动自动重新生成后再执行make,所以在工程中添加和删除源文件,不需要修改makefile,只需要重新编译即可。

Makefile中如下定义,是定义输出文件文件名称和输出文件类型。

TARGETNAME := arm9projtest

#TARGETTYPE can be APP, STATIC or SHARED

TARGETTYPE := APP

APP及生成可执行二进制文件,生成的文件可以直接在arm板终端下运行,如上定义最终将在Debug下生成arm9projtest。

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

如果源文件需要生成动态库.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

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

    至此arm9的开发编译环境已经介绍完了,后面介绍下,如何快速建立工程,把以前的代码移植到vs上。

首先我们按照上述方式建立一个测试工程,配置好编译环境。

然后从vs工程中删除测试代码,添加我们自己的代码到工程中。

最后在Makefile中修改目标名称和目标类型,重新编译,即可生成我们自己的目标文件。

 

如果开放项目比较大,有很多个工程需要建立,这里介绍一个便捷的方式。

1,把配置好的工程文件夹复制一份,把文件夹名称修改为新的工程名称,例如:员工称文件夹为arm9projtest,复制一份修改为aaa1。

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

2,进入aaa1,保留如下文件其余都删除,这里我用的是debug.mak,如果建立工程使用的配置为release.mak请保留release相关的文件。

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


3,把文件命中arm9projtest都改为aaa1。

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

4, 选择arm9projtest.vcxproj文件,用文本编辑器打开,把如下内容修改一为aaa1,绿色标注的两个地方:

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

5,打开VS 工程,选择Solution右击->ADD->ExistingProject 选择我们修改的工程arm9projtest.vcxproj,添加到Solution中。

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

删除掉工程的源文件,添加自己的源文件到工程中,修改makefile目标名称和目标类型,然后编译即可。

下面截图是我的整个项目工程的搭建结果:

visual studio 2013上搭建arm交叉编译环境(四)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