make 基本使用

阅读数:103 评论数:0

跳转到新版页面

分类

Linux

正文

一、概述

configure用于生成makefile,make命令根据makefile文件编译程序,make install 会把可执行程序安装至/usr/local/bin目录。

二、makefile

makefile文件中包含显式的规则、隐式的规则、变量定义、指令和注释(注释使用#)。

1、行结束符

makefiles的语法是基于行的,结尾没有行结束符。如果一行过长,怎么办呢?在断开的地方使用\,例如:

SUBARCH := $(shell uname -m | sed -e s/i.86/x86/ -e s/x86_64/x86/ \
				  -e s/sun4u/sparc64/ \
				  -e s/arm.*/arm/ -e s/sa110/arm/ \
				  -e s/s390x/s390/ -e s/parisc64/parisc/ \
				  -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
				  -e s/sh[234].*/sh/ -e s/aarch64.*/arm64/ \
				  -e s/riscv.*/riscv/)

2、make文件名

默认,make是按GNUmakefile、makefile、Makefile的顺序寻找文件名。推荐使用Makefile这外名称,因为它在文件排序中比前靠前,而且还靠近README这些重要的文件。

当然也可以使用-f name或--file=name的方式来指定make的文件名。

3、包含其它的makefiles

include filenames...
#不包含
-include filenames...

三、make命令选项

1、make clean与make distclean的区别

(1)make clean仅仅是清除之前编译的可执行文件及配置文件。

(2)make distclean要清除所有生成的文件。

2、命令选项

--always-make 强制所有目标重新执行make

-C dir

--directory=dir

在读取makefile之前移动工作目录到dir
-d 打印调试信息,等价于--debug=a
--debug[=options]

打印调试信息,可以选择级别和类型

(1)a(all)

(2)b(basic)输出out-of-date的目标和编译是否成功

(3)v(verbos)高于basic,包括处理哪些makefiles等

(4)i(implicit)

(5)j(jobs)

(6)m(makefile)

(7)n(none)

-e

--environment-overrides

指定使用的变量环境

-E string

--eval=string

把string用makefile语法解释

-f file

--file=file

--makefile=file

指定读取的makefile

-i

--ignore-errors

忽视执行make时的所有错误

-I dir

--include-dir=dir

指定执行makefile是使用的目录

-j [jobs]

--jobs[=jobs]

指定可以同时执行的recipes(jobs)的数量

-k

--keep-going

在发生错误时尽量继续执行

-l [load]

--load-average [=load]

--max-load[=load]

如果有其它recipes在执行,并且系统的负载平均值最少是指定的load值,那么新的recipes不应该开始。

-L

--check-symlink-times

在支持符号链接的系统中,检查symlink的时间戳。

-n

--just-print

--dry-run

--recon

打印要执行的recipe,但并不实际执行它。

-o file

--old-file=file

--assume-old=file

即使指定文件older than its prerequisites,也不要remake。

 

 

-O[type]

--output-sync[=type]

与--jobs同用

-p

--print-data-base

打印data base(规则和变量值)

-q

--question

不执行任何recipes,也不打印任何值,返回值如果是0,表示不需要remake,1表示需要remake,2表示发生错误。

-r

--no-builtin-rules

不使用built-in rules

-R

--no-builtin-variables

不使用built-in variables

-s

--silent

--quiet

安静模式

-S

--no-keep-going

--stop

与-k功能相反

-t

--touch

用于创建文件来替代执行recipes

--trace

显示make的跟踪信息

-w

--print-directory

输出工作目录信息

--no-print-directory

与-w功能相反

-W file

--what-if=file

--new-file=file

--assume-new=file

假设指定目标文件刚被修改

--warn-undefined-variables

 

发现未定义的变量时产生一个warning

四、GUN make特定变量

MAKEFILES make读取的makefiles
VPATH 搜索目录,用于当前目录中未找到的文件的其它搜索目录
SHELL 系统使用的默认命令解释器的名称,一般是/bin/sh。
MAKESHELL 只用于MS-DOS
MAKE make调用时使用的名子
MAKE_VERSION  
MAKE_HOST 执行make所在的主机
MAKELEVEL 递归执行make的次数
MAKEFLAGS make执行时使用的配置项
GUNMAKEFLAGS 只用于GNU make可识别的配置项
MAKECMDGOALS 命令行执行make的目标
CURDIR 当前的工作目录
SUFFIXES make识别的后缀
LIBPATHTERNS make搜索的库的名称和顺序



相关推荐

一、概述 在Linux系统中,/usr/bin和/usr/local/bin是两个常见的目录,用于存放可执行文件(二进制文件)。 很多应用都安装在/usr/local下面,先看一下automake工具

一、configure       这一步一般用来生成Makefile,为下一步的编译做准备。       你可以通过在configure后加上参数来对安装进行控制,比如代码: ./configure

一、概述 cmake是一个跨平台的编译自动配置工具,它并不直接构建最终的软件,它只是通过读取CMakeLists.txt配置文件,然后按配置输出定义式的Makefile或project文件。 二、变量

1. 下载cmake.tar.gz文件 2.安装依赖 yum install zlib-devel o

一、概述    Linux内核源码中含有很多个Makefile文件,这些Makefile文件又要包含其他一些文件(比如配置信息、通用规则 等)。这些文件构成了Linux的Makefile体系。

一、概述     在Linux中使用make命令来编译程序,特别是大程序,而make命令所执行的动作依赖于Makefile文件。make命令根据文件更新的时间戳来决定哪些文件需要重新编译,这可以避免编

当你下载redis 最新版本6.0.8 的时候会发现make的时候会报错,简单来说就是最新版的redis用到了c11 ,你的系统gcc版本低了,系统自带gcc版本是4.8.5,只需要更新下gcc

一、概述 makefile文件包含一些规则,告诉make工具编译哪些文件以及怎样编译这些文件。 配置文件.config 是在进行内核配置后生成的中间产物。 是通过make menuconfi

$@ 目标的名字 $^ 构造所需文件列表所有文件的名字 $< 构造所需文件列表的第一个文件的名字 $? 构造所需文件列表中更新过的文件 (1)- make 在执行命令的时候,如