use makefile on android-linux

来源:互联网 发布:禁止系统安装软件 编辑:程序博客网 时间:2024/06/05 20:06

试验环境

NDK是android-ndk-r10e x86版本
OS : win7X64Sp1

设置环境变量

将 D:\android-ndk-r10e\prebuilt\windows\bin 加入环境变量
测试一下make.exe是否可用
这里写图片描述

写原始的makefile

最原始的makefile内容和命令行直接敲或搞一个Windows批处理文件差不多. 写法和批处理差不多.
但是当编译关系复杂后,使用makefile维护工程的编译比批处理好很多.

#测试用make命令行编译makefile, 用来产生在真机中可以运行的android-linux程序all:    D:/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-gcc.exe \    -ID:/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.9/include-fixed \    -ID:/android-ndk-r10e/platforms/android-19/arch-arm/usr/include \    -LD:/android-ndk-r10e/platforms/android-19/arch-arm/usr/lib \    -nostdlib \    -Bdynamic \    -lc \    -lgcc \    -c hw.c -o hw.o    D:/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-gcc.exe \    -ID:/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.9/include-fixed \    -ID:/android-ndk-r10e/platforms/android-19/arch-arm/usr/include \    -LD:/android-ndk-r10e/platforms/android-19/arch-arm/usr/lib \    -nostdlib \    -Bdynamic \    -lc \    -lgcc \    hw.o \    D:/android-ndk-r10e/platforms/android-19/arch-arm/usr/lib/crtbegin_dynamic.o \    D:/android-ndk-r10e/platforms/android-19/arch-arm/usr/lib/crtend_android.o \    -o hwclean:    cls    del hw.o    del hw

make原始的makefile效果

这里写图片描述

按照makefile规则,写.o依赖关系

#测试用make命令行编译makefile, 用来产生在真机中可以运行的android-linux程序#规则需要的依赖文件(.o, .c, .cpp, .h) 需要在规则:符号后列出, 多个依赖文件之间用' '空格符号分隔, 换行用'\'#终极目标 : 第一个规则名称是终极目标all: hw.o    D:/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-gcc.exe \    -ID:/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.9/include-fixed \    -ID:/android-ndk-r10e/platforms/android-19/arch-arm/usr/include \    -LD:/android-ndk-r10e/platforms/android-19/arch-arm/usr/lib \    -nostdlib \    -Bdynamic \    -lc \    -lgcc \    hw.o \    D:/android-ndk-r10e/platforms/android-19/arch-arm/usr/lib/crtbegin_dynamic.o \    D:/android-ndk-r10e/platforms/android-19/arch-arm/usr/lib/crtend_android.o \    -o hw#被依赖的.o 编译规则    hw.o: hw.c    D:/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/bin/arm-linux-androideabi-gcc.exe \    -ID:/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows/lib/gcc/arm-linux-androideabi/4.9/include-fixed \    -ID:/android-ndk-r10e/platforms/android-19/arch-arm/usr/include \    -LD:/android-ndk-r10e/platforms/android-19/arch-arm/usr/lib \    -nostdlib \    -Bdynamic \    -lc \    -lgcc \    -c hw.c#伪目标    clean:    cls    del hw.o    del hw

在makefile中,重构,整理变量

已经测试过了,运行正常,可维护性更好

#测试用make命令行编译makefile, 用来产生在真机中可以运行的android-linux程序#用法# make 显示帮助# make clean => 清除垃圾# make all => 重新建立工程所有输出文件#规则需要的依赖文件(.o, .c, .cpp, .h) 需要在规则:符号后列出, 多个依赖文件之间用' '空格符号分隔, 换行用'\'#------------------------------------------------------------#定义变量, 必须在变量被用到之前, 提前定义#------------------------------------------------------------NDK_ROOT_DIR := D:/android-ndk-r10eNDK_PLATFORMS_DIR := $(NDK_ROOT_DIR)/platformsNDK_TOOLCHAINS_DIR := $(NDK_ROOT_DIR)/toolchainsNDK_PLATFORMS := $(NDK_PLATFORMS_DIR)/android-19/arch-arm/usrNDK_PLATFORMS_INC := $(NDK_PLATFORMS)/includeNDK_PLATFORMS_LIB := $(NDK_PLATFORMS)/libNDK_PREBUILT := $(NDK_TOOLCHAINS_DIR)/arm-linux-androideabi-4.9/prebuilt/windowsNDK_PREBUILT_INC := $(NDK_PREBUILT)/lib/gcc/arm-linux-androideabi/4.9/include-fixedCRT_BEGIN_IMP := $(NDK_PLATFORMS_LIB)/crtbegin_dynamic.oCRT_END_IMP := $(NDK_PLATFORMS_LIB)/crtend_android.oNDK_GCC_PROG := $(NDK_PREBUILT)/bin/arm-linux-androideabi-gcc.exeCOMPILER_OPTIONS := \    -I$(NDK_PREBUILT_INC) \    -I$(NDK_PLATFORMS_INC) \    -L$(NDK_PLATFORMS_LIB) \    -nostdlib \    -Bdynamic \    -lc \    -lgcc#------------------------------------------------------------# 终极目标 : 第一个规则名称是终极目标# 帮助#------------------------------------------------------------no_make_paramter:    @echo usage:    @echo make all : build all    @echo make clean : remove trash#------------------------------------------------------------#被依赖的.o 编译规则#------------------------------------------------------------#------------------------------------------------------------# hw.c#------------------------------------------------------------HW_O_IMP := hw.cHW_O_OUT := hw_c.o$(HW_O_OUT): $(HW_O_IMP)    $(NDK_GCC_PROG) \    $(COMPILER_OPTIONS) \    -c $(HW_O_IMP) \    -o $(HW_O_OUT)#------------------------------------------------------------# 因为定义变量后,有执行的先后顺序, 必须执行 make all 才能到这#------------------------------------------------------------#工程最终输出文件名称, 测试过了, 可以改成自己想要的PRJ_OUT := hwOBJECTS := $(HW_O_OUT)all: $(OBJECTS)    $(NDK_GCC_PROG) \    $(COMPILER_OPTIONS) \    $(HW_O_OUT) \    $(CRT_BEGIN_IMP) \    $(CRT_END_IMP) \    -o $(PRJ_OUT)#------------------------------------------------------------# 伪目标# make clean : 清除垃圾#------------------------------------------------------------.PHONY:clean    clean:    cls    del $(HW_O_OUT)    del $(PRJ_OUT)
0 0