规则(Rules):一个Makefile文件由一条一条的规则构成,一条规则结构如下
target … (目标): prerequisites …(依赖) recipe(方法) … …
最简单的Makefile
hello: hello.cpp g++ hello.cpp -o hello # 开头必须为一个Tab,不能为空格
但通常需要将编译与链接分开写,分为如下两步
hello: hello.o g++ hello.o -o hello hello.o: hello.cpp g++ -c hello.cpp
Makefile文件的命名与指定
Make会自动查找makefile文件,查找顺序为GNUmakefile -> makefile -> Makefile
GNUmakefile:不建议使用,因为只有GNU make会识别,其他版本的make(如BSD make, Windows nmake等)不会识别,如果只给GNU make使用的情况
makefile:可以使用,GNU make和其他版本make识别
Makefile:最常用,强烈建议使用
如果运行make的时候没有找到以上名字的文件,则会报错,这时候可以手动指定文件名
make -f mkfile # make -f <filename> make --file=mkfile # make --file=<filename>手动指定之后,make就会使用指定的文件,即使有Makefile或者makefile不会再自动使用
Makefile文件内容组成
一个Makefile文件通常由五种类型的内容组成:显式规则、隐式规则、变量定义、指令和注释
显式规则(explicit rules):显式指明何时以及如何生成或更新目标文件,显式规则包括目标、依赖和更新方法三个部分
隐式规则(implicit rules):根据文件自动推导如何从依赖生成或更新目标文件。
变量定义(variable definitions):定议变量并指定值,值都是字符串,类似C语言中的宏定义(#define),在使用时将值展开到引用位置
指令(directives):在make读取Makefile的过程中做一些特别的操作,包括:
-
读取(包含)另一个makefile文件(类似C语言中的#include)
-
确定是否使用或略过makefile文件中的一部分内容(类似C语言中的#if)
-
定义多行变量
注释(comments):一行当中 # 后面的内容都是注释,不会被make执行。make当中只有单行注释。如果需要用到#而不是注释,用\#。
标签:文件,教程,makefile,make,规则,Makefile,使用,hello From: https://www.cnblogs.com/navysummer/p/18209366