makefile

来源:互联网 发布:数学网络课程哪个好 编辑:程序博客网 时间:2024/05/18 09:04
1、编译 .c 生成 .o 高级语言生成可识别的机器指令,不能被执行
   链接 将.o文件和库文件链接成可执行文件
     库文件包括静态库和动态库。
     静态库是多个.o文件的集合,链接时被加载,使用ar工具维护;
     动态库也是多个.o文件的集合,又叫共享库,运行时被加载,多个进程共享其代码段,不共享数据段。


2、gcc -c :生成.o文件


3、使用 \ 来分行     


4、makefile的处理规则
   a/目标.o不存在,使用描述规则创建
   b/目标.o的依赖.c比它新,使用描述规则重新创建
   c/目标.o的依赖.c没它新,什么都不做
   
5、变量
   声明:object=a.o b.o
   使用:main:$(object) 
   
   = 递归展开式  可以展开后面定义的变量  (容易产生死循环)
   :=直接展开式  不可以展开后面定义的变量  (推荐使用)
   ?=如果该变量未被定义则定义它,否则不执行任何操作
   +=追加变量
   
6、隐含规则
   .c生成.o的规则可以省去命令
   main.o:main.c
   
7、伪命令
   .PHONY:clean
   clean:
       rm .......


8、makefile第一个规则之后所有以[Tab]字符开始的行make将它交给shell处理


9、包含其他makefile
   暂停读取当前makefile,先读取includemakefile
   include Filenames...   文件不存在将报错
   
   -include Filenames...  忽略文件不存在的影响   
   
   snclude Filenames...   兼容性更高
   
10、变量object=*.o object代表字符串*.o,而不是所有.o文件,因为它只是把字符串赋给了变量
   可以使用wildcard函数来处理通配符
   object=$(wildcard *.o)现在object等于所有的.o文件了  
   wildcard是通配符处理函数
   
11、条件判断语句
   ifeq
   ifneq
   ifdef
   ifndef
   
   ifeq(var1,var2)
      代码段
   else
      代码段
   endif
   
12、make中当有逗号或空格作为参数时,需要把它们赋值给一个变量


13、一些文本处理函数
   subset
     格式:$(subset from,to,text)
     字符串替换
   patsubset
     格式:$(patsubset pattern,replacement,text)
     模式替换


14、函数
   shell  
   call   调用自定义的函数     
     
                           
0 0
原创粉丝点击