目录 前言 1. 特点 2. 分析 2.1 简要原理 2.2 具体分析 3. 源码 前言 该 Makefile 已经通过基于内核 Linux5.4 版本验证通过. 因为编写这通用驱动 Makefile 时遇到了头文件指定路径失败的问题.使用过 ccflags-y .INCDIR .EXTRA_CFLAGS .-L 等等参数都无效.就是因为我使用了 $(shell pwd).导致这些参数的路径都为内核源码路径下,而非模块路径.后面重新查看内核文档,看内核的推荐写法才解决了,使用 $(src) 来获…
1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe 1.2体验在VC下程序的编译 a.先编译,在链接 b.修改了哪个文件,就单独编译此文件,在链接 c.修改了哪个头文件,就单独编译使用该头文件的源文件,在链接 1.3在linux下实现上述要求 2.编写一个测试的Makefile 2.1直接编译链接 gcc -o test a.c b.c 缺点:改变其中一个文…
GNU Make简介 大型项目的开发过程中,往往会划分出若干个功能模块,这样可以保证软件的易维护性. 作为项目的组成部分,各个模块不可避免的存在各种联系,如果其中某个模块发生改动,那么其他的模块需要相应的更新.如果通过手动去完成这个工作的话,对于小型的项目可能还行,但是对于比较大型的项目就几乎是不可能的. 因此Linux 系统提供了一个自动维护和生成目标程序的工具 make,它可以根据各个模块的更改情况去重新编译连接目标代码 Make 工具的作用就是实现编译连接过程的自动化.它定义了一种语言,用…
1.各级子目录的Makefile: obj-y += file.o obj-y += subdir/ “obj-y += file.o” 表示把当前目录下的file.c编进程序里. “obj-y += subdir/”表示进入subdir这个子目录下去寻找文件来编进子程序中: 2.顶层目录的Makefile: CROSS_COMPILE =                        #如果要交叉编译的话,就是:CROSS_COMPILE = arm-linux- AS           =…
编译test_Makefile的方法:a. gcc -o test a.c b.c对于a.c: 预处理.编译(C文件转换成汇编).汇编(汇编转换成机器码)对于b.c:预处理.编译.汇编最后链接优点:命令简单缺点:如果文件很多,即使你只修改了一个文件,但是所有的文件文件都要重新"预处理.编译.汇编" 效率低 b. 写Makefile核心:规则 目标:依赖1 依赖2(目标指根据依赖生成文件名字) 命令 a.o : a.c gcc -c -o a.o a.c %.o:%.c    //这里的…
通常要把我们自己的的代码编译成在android里面编译的可执行文件,我们通常是建一个文件夹 . ├── Android.mk ├── Application.mk ├── convolve.cl ├── convolve_cl.cpp ├── convolve_cl.cpp~ ├── inter_ocl │   └── opencl │   ├── CL │   │   ├── cl_ext.h │   │   ├── cl.h │   │   ├── cl_platform.h │   │  …
据http://bbs.chinaunix.net/thread-2300778-1-1.html的讨论,发现还是有很多人在问通用Makefile的问题,这里做一个总结.也作为以后的参考.       笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应用程序则所有的Makefile都要重写一遍,虽然可以部分的粘帖复制,但还是感觉应该找到更好的解决途径:另外当一个应用程序中包含多个文件夹时通常要在每个目录下创建一个Makefile,当有数十个文件夹时,要创建如此多的…
话不多说,请看: 我的项目有的目录结构有: dirls/ ├── include │   └── apue.h ├── lib │   ├── error.c │   ├── error.o │   └── Makefile ├── src │   ├── dirls.c │   ├── dirls.out │   └── Makefile └── test_client 而我的Makefile模板代码如下: SRCS = $(wildcard *.c ../lib/*.c) #wildcard…
代码: CXX := g++ CFLAGS := -g TARGET := xxx.exe SRCS := $(wildcard *.cpp) OBJS := $(patsubst %cpp,%o,$(SRCS)) all:$(TARGET) %.o:%.cpp     $(CXX) $(CFLAGS) -c $< $(TARGET):$(OBJS)     $(CXX) $(CFLAGS) -o $@ $^ clean:     rm -rf $(TARGET) *.o 操作: make xx…
最近在编写Android编译系统时,需要遍历每一个目录下每一个文件夹下的makefile,网上的方法有些繁琐 :就直接贴上自己遍历子目录深度为1:(for  temporary)(之后会继续更新) 下面是我的一个简单实例工程: 文件夹目录层次: 1.根目录(相对于项目而言)的makefile #获取当前目录下的子目录名字 subdir = $(shell ls -l | grep ^d | awk '{print $$9}') .PHONY : all clean ${subdir} NULL…