makefile笔记

来源:互联网 发布:知行论坛北交大注册 编辑:程序博客网 时间:2024/05/01 23:06

======================== Makefile=============================
$$  makefile中目标命令中的ifeq需要顶格写,否则解析错误
例如: 如果ifeq和endif没有顶格写就会编译错误
SK_APP:
 $(MAKE) -C $(APPS)
ifeq ($(SKY_FACTORY_TEST_SUPPORT),YES)
 $(MAKE) -C $(SK_HDI)/sk_hdi_factory_test
endif
SK_APP_CLEAN:
 $(MAKE) -C $(APPS) clean
ifeq ($(SKY_FACTORY_TEST_SUPPORT),YES)
 $(MAKE) -C $(SK_HDI)/sk_hdi_factory_test clean
endif


$$ 宏定义使用前缀-D,在编译过程中可以把宏定义追加到CFLAG中。宏定义有两种相似的写法
    【第一种】-D DEFINES
    【第二种】-D DEFINES=CONDITION
 
 在Makefile中我们可以通过宏定义来控制源程序的编译。只要在Makefile中的CFLAGS中通过选项-D来指定你于定义的宏即可。

 如:
 CFLAGS += -D _YUQIANG
 在编译的时候加上此选项就可以了: 那么在C程序源码中就相当于定义了一个宏 : #define _YUQIANG
 
$$make 选项
 -I 设置include文件路径
 -i 包含文件,相当于include<>
 
 -L 设置连接库的路径
 -l 指定连接的库名
 
$VPATH
 在Linux操作系统中,有一个PATH环境变量。当用户输入一个命令时,操作系统会现在这个环境变量指定的路径中查找命令。
 如果找不到的话,就会提示错误信息。在make命令中,也有一个类似参数,叫做VPATH
 
 一是什么参数都不带的情况下,就是一个vpath光棍司令,并不是表示采用当前的vpath变量。而是指清除所有已经设置好了的文件搜索目录。
    注意其清除vpath命令所设置的搜索路径,而不影响VPATH变量所设置的查找路径。
   系统管理员不要被它们的外表所蒙骗了。只要记住它们两个是不同的变量,虽然名字相同。
  二是带一个参数pattern,如vpath %.h。此时系统会清除符合模式的文件的搜索路径。
   如现在系统管理员可能会同时建立多个搜索策略,如.c、.h等等。而通过这种形式就只会删除符合模式的搜索路径。
   而不会影响到其它模式的搜索路径。
  三是带两个参数,如vpath %.h ..(这个命令表示在上级目录中查找.h文件)。两个参数(匹配模式与文件的搜索路径)都带齐的话,
   就表示在指定的目录中按规定的模式进行查找。不过需要注意的是,这里一个模式最好对应一条语句。也就是说,
   在一个vpath语句中定义一个匹配模式。如果要定义多个匹配模式的话,此时最好的办法是连续使用vpath语句来定义,
   以指定不同的搜索策略。不过需要注意的是,如果模式相同,第二次定义的时候就会更新原有的定义。也即是说,
   两者的关系是替换,而不是追加。为此同一个模式,如果需要在多个路径中查找的话,那么要么在一条语句中定义多个路径,
   要么就是将它们复制到同一个文件夹中。一般最好将同一个模式的文件复制到同一个文件夹里,以方便管理。除非特别复杂的项目,
   才根据用途或者模块将它们分文件夹保存。
    
 

0 0
原创粉丝点击