Makefile中的 ifeq

Makefile中的ifeq 

多条件判断

ifeq ($(TARGET_ARCH), arm)
        LOCAL_SRC_FILES := ...
else ifeq ($(TARGET_ARCH), x86)
        LOCAL_SRC_FILES := ...
else ifeq ($(TARGET_ARCH), mips)
        LOCAL_SRC_FILES := ...
else 
        LOCAL_SRC_FILES := ...
endif

删除中间文件:

clean:
    rm -f $(ALL_OBJS)

 make是如何工作的

在默认的方式下,也就是我们只输入make命令。那么,

  1. make会在当前目录下找名字叫“Makefile”或“makefile”的文件。
  2. 如果找到,它会找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件。
  3. 如果目标文件不存在,或是目标文件所依赖的后面的 .o 文件的修改时间要比目标文件新,那么,他就会执行后面所定义的命令来生成目标文件。
  4. 如果目标文件所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。(这有点像一个堆栈的过程)
  5. 当然,你的C文件和H文件是存在的啦,于是make会生成 .o 文件,然后再用 .o 文件声明make的终极任务,也就是执行目标文件。

反斜杠(\)是换行符的意思

编译、链接

一般来说,无论是C、C++、还是pas,首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX下是.o文件,即Object File,这个动作叫做编译(compile)。

然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。   

编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。 
    链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(LibraryFile),也就是 .lib文件,在UNIX下,是Archive File,也就是 .a文件

猜你喜欢

转载自www.cnblogs.com/pjl1119/p/9881904.html