linux makefile 速查

来源:互联网 发布:网络动作游戏排行榜 编辑:程序博客网 时间:2024/06/10 10:44

本文只介绍makefile中的命令和符号的作用。

***********************************************************************

依赖,冒号前面是目标,后面是依赖的文件

***********************************************************************

\

换行符,写不下的时候换行用。

***********************************************************************

#

注释,如果要使用#

***********************************************************************

命令        

说明

-x <language type>

显示指定输入文件的格式

-c

编译和汇编源文件,但不链接,输出为.o文件格式

-S

编译源文件,但不汇编,输出为.S文件格式

-E

只对源文件进行预处理,并不编译,输出为经过预处理的源代码

我们可以利用上面的-x和-c / –S / –E的组合来控制GCC的整个编译过程,其中-x用于告诉GCC我们从哪里开始,而-c / -S / -E用来告诉GCC在那里结束。

-o output-file

用来指定输出文件,该选项可以指定很多种输出文件,例如:可执行文件、目标文件、汇编文件或者是预处理过的程序代码等,这要根据具体的命令行参数而定。当然,GCC还提供了默认的-o选项,其中,默认的可执行文件是a.out,目标文件是<file_name>.o,汇编文件是<file_name>.s,预编译头文件的格式是<file_name>.suffix.gch

-I<dir name>

告诉GCC在<dir name>中去寻找头文件

-L<dir name>

告诉GCC在<dir name>中去寻找库文件

-l<lib name>

使用名为lib<lib name>.so的程序库

-static

通知GCC链接静态库



***********************************************************************

-M 或者 -MM

自动找头文件,“-M”参数会把一些标准库的头文件也包含进来,“-MM”只会包含非标准库的头文件。

如:gcc -MM main.c的输出则是:

main.o: main.c defs.h

***********************************************************************

=或:= 

= 和 := 的区别在于, := 只能使用前面定义好的变量, = 可以使用后面定义的变量。

***********************************************************************

@ 和 -, 或者不用前缀

  • 不用前缀 :: 输出执行的命令以及命令执行的结果, 出错的话停止执行
  • 前缀 @   :: 只输出命令执行的结果, 出错的话停止执行
  • 前缀 -   :: 命令执行有错的话, 忽略错误, 继续执行

***********************************************************************

include

引用其他makefile

***********************************************************************

自动变量

含义

$@目标集合$%当目标是函数库文件时, 表示其中的目标文件名$<第一个依赖目标. 如果依赖目标是多个, 逐个表示依赖目标$?比目标新的依赖目标的集合$^所有依赖目标的集合, 会去除重复的依赖目标$+所有依赖目标的集合, 不会去除重复的依赖目标$*这个是GNU make特有的, 其它的make不一定支持

***********************************************************************

ifeq ifneq ifdef ifndef

条件判断

***********************************************************************


***********************************************************************


***********************************************************************


***********************************************************************


***********************************************************************


***********************************************************************