标准makefile

一个很典型的Linux C/C++的makefile写法,其它的应用可根据此template修改。(注意每一行的前面若有空格,是tab,不是space)

  1. #Source file  
  2. SRC = ThreadQueue.cpp  
  3. #Object file  
  4. OBJ = $(SRC:.cpp=.o)  
  5. #Output execution file  
  6. PROGRAM = ThreadQueue 
  7. #Compiler  
  8. CC = g++  
  9. #Include  
  10. INCLUDE = -I/usr/include/ncurses -I/usr/include/  
  11. #Linker Parameter  
  12. LINKPARAM = -lpthread -lncurses  
  13. #Options for development  
  14. #CFLAGS = -ansi -g -Wall  
  15. #Options for release  
  16. CFLAGS = -ansi -O -Wall  
  17. : $(PROGRAM)  
  18. $(PROGRAM): $(OBJ)  
  19. $(CC) -o $(PROGRAM) $(LINKPARAM) $(OBJ)   
  20. SUFFIXES : .cpp  
  21. cpp.o:  
  22. $(CC) $(INCLUDE) $(CFLAGS) -c $< 
  23. clean: 
  24. -rm *.o 
<think>好的,我需要帮助用户找到关于Android系统中标准Makefile的结构或示例的信息,特别是在系统构建过程中。用户提到了“standard Makefile”,这可能涉及到Android.mk或者类似的文件。根据用户提供的引用,特别是引用[2]提到了模块的Makefile被命名为MyAndroid.mk,还有引用[1]中提到了应用Makefile的重命名。这可能意味着Android构建系统中使用不同的Makefile类型,比如应用级和模块级的。 首先,Android的构建系统经历了一些变化,早期使用GNU Make,后来转向Soong和Blueprint。但用户可能还在使用传统的基于Make的构建系统,所以需要关注Android.mk的结构。根据引用[2],编译过程涉及并行编译依赖文件,并调用特定的工具链,如compile命令。这可能涉及到Android.mk中的模块定义,包括LOCAL_MODULE、LOCAL_SRC_FILES等变量。 接下来,用户需要示例和结构。Android.mk通常用于定义模块,如库、可执行文件等。例如,一个简单的模块可能包括: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mymodule LOCAL_SRC_FILES := mymodule.c include $(BUILD_SHARED_LIBRARY) 这里,LOCAL_PATH设置模块路径,CLEAR_VARS清除旧变量,LOCAL_MODULE定义模块名称,LOCAL_SRC_FILES指定源文件,最后BUILD_SHARED_LIBRARY指示构建共享库。此外,引用[5]提到JNI,可能涉及在Android.mk中链接本地库。 另外,引用[3]提到pkg目录的结构,可能与Go项目相关,但用户的问题集中在Makefile,所以可能不需要深入这点。引用[4]关于SELinux策略安装路径,可能与系统构建中的策略部署有关,但可能不是用户当前的重点。 用户可能需要了解Android构建系统中Makefile标准变量和指令。例如,LOCAL_STATIC_LIBRARIES、LOCAL_SHARED_LIBRARIES用于声明依赖,LOCAL_C_INCLUDES指定头文件路径。同时,include $(BUILD_PACKAGE)用于构建APK。 还要注意,Android的构建系统可能涉及多个Makefile,包括应用级别和模块级别,如引用[1]中的MyApplication.mk和MyAndroid.mk,但标准名称通常是Android.mk。用户可能需要参考官方文档或AOSP中的示例,如源码中的development/samples目录。 最后,用户可能需要了解如何集成第三方库或自定义模块,这通常通过Android.mk实现。例如,添加预编译库或设置编译器标志。同时,构建系统工具如mm或mma用于编译特定模块。 总结,回答应包含Android.mk的基本结构、常用变量、模块类型示例,以及可能的构建命令。确保引用相关引用,如引用[2]提到的编译过程和工具链路径,引用[5]关于JNI的部分可能关联到本地代码编译。</think>在Android系统构建过程中,标准Makefile(通常为$Android.mk$)用于定义模块构建规则,其核心结构包含模块类型声明、源文件指定和依赖关系配置。以下是详细解析: ### 一、Android.mk基本结构示例 ```makefile LOCAL_PATH := $(call my-dir) # 获取当前文件路径[^2] include $(CLEAR_VARS) # 清除旧变量 LOCAL_MODULE := libdemo # 定义模块名称 LOCAL_SRC_FILES := demo.cpp # 指定源文件 LOCAL_SHARED_LIBRARIES := liblog # 声明共享库依赖[^5] include $(BUILD_SHARED_LIBRARY) # 声明构建类型为动态库 ``` ### 二、关键元素解析 1. **模块声明**: - $LOCAL_MODULE$:唯一模块标识符,自动添加前缀(如libdemo变为libdemo.so) - $LOCAL_SRC_FILES$:支持C/C++/汇编源文件,支持通配符*.cpp 2. **构建类型控制**: - $BUILD_SHARED_LIBRARY$:生成动态库(.so) - $BUILD_STATIC_LIBRARY$:生成静态库(.a) - $BUILD_EXECUTABLE$:生成可执行文件 - $BUILD_PACKAGE$:用于APK打包 3. **依赖管理**: - $LOCAL_STATIC_LIBRARIES$:静态库依赖 - $LOCAL_SHARED_LIBRARIES$:动态库依赖(如liblog用于Android日志输出) - $LOCAL_C_INCLUDES$:头文件搜索路径 ### 三、系统级构建流程 Android构建系统通过$make -f build/core/main.mk$启动,逐层包含子目录中的$Android.mk$文件。构建过程采用并行编译策略,如引用[2]描述的并行编译依赖文件,并调用特定工具链(如Go语言工具链路径在引用[2]中示例)。 ### 四、进阶配置示例 ```makefile # JNI本地库配置 LOCAL_JNI_SHARED_LIBRARIES := libnative LOCAL_REQUIRED_MODULES := libnative # 声明运行时依赖 # 预编译第三方库 include $(CLEAR_VARS) LOCAL_MODULE := prebuilt_lib LOCAL_SRC_FILES := prebuilt/libfoo.so include $(PREBUILT_SHARED_LIBRARY) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值