上篇文章已经介绍了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