Linux Make命令详解

1 概述

  make命令常用参数-C,-n, -j.其实make还有很多参数也很有用,本文描述将简单介绍。

使用make版本:

$ make --version
GNU Make 4.2.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

2 参数

2.1 -b,-m

忽略兼容性
(Ignored for compatibility).

$ make -b
$ make -m

2.2 -B, --always-make

无条件编译所有目标(Unconditionally make all targets).

$ make -B
$ make --always-make

2.3 -C DIRECTORY, --directory=DIRECTORY

改变编译目录(Change to DIRECTORY before doing anything).

$ make -C src
$ make --directory=src

2.4 -d

打印许多调试信息,对调试Makefile很有用(Print lots of debugging information).

$ make -d

2.5 --debug[=FLAGS]

打印各种类型的调试信息(Print various types of debugging information).
FALGS:

  • a (all) 输出所有类型的调试信息,等效于“-d”选项
  • b (basic) 输出基本调试信息。包括:那些目标过期、是否重建成功过期目标文件
  • v (verbose) basic级别之上的输出信息。包括:解析的makefile文件名,不需要重建文件等。此选项目默认打开“basic”级别的调试信息。
  • i (implicit) 输出所有使用到的隐含规则描述。此选项目默认打开“basic”级别的调试信息。
  • j (jobs) 输出所有执行命令的子进程,包括命令执行的PID等。
  • m (makefile) 也就是makefile,输出make读取makefile,更新makefile,执行makefile的信息。

2.6 -e, --environment-overrides

用系统环境变量覆盖Makefile文件中环境变量(Environment variables override makefiles).

2.7 --eval=STRING

将STRING赋值为makefile语句(Evaluate STRING as a makefile statement).

2.8 -f FILE, --file=FILE, --makefile=FILE

将FILE作为makefile文件(Read FILE as a makefile).

$ make -f mkfile
$ make --file mkfile
$ make --makefile mkfile

2.9 -i, --ignore-error

忽略错误接着执行(Ignore errors from recipes).

2.10 -I DIRECTORY, --include-dir=DIRECTORY

在指定目录中搜索包含的makefile(Search DIRECTORY for included makefiles).

2.11 -j [N], --jobs[=N]

一次允许N个编译;无参数说明使用CPU核数个编译(Allow N jobs at once; infinite jobs with no arg).

$ make -j
$ make -j 4

2.12 -l [N], --load-average[=N], --max-load[=N]

除非负载低于N,否则不要启动多个作业(Don’t start multiple jobs unless load is below N).

$ make -j -l 0.01
$ make -j --load-average 0.1
$ make -j ----max-load  1

2.13 -L, --check-symlink-times

使用符号链接和目标之间的最新修改时间(Use the latest mtime between symlinks and target).

$ make -L

2.14 -n, --just-print, --dry-run, --recon

不实际编译,只是打印编译步骤(Don’t actually run any recipe; just print them).

src$ make -n
mkdir -p /home/james/git/cppcmd1.0.0/src/.obj
echo C++ /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o
g++ -c -std=c++11 -I/home/james/git/cppcmd1.0.0/src/../inc /home/james/git/cppcmd1.0.0/src/../src/cppcmd.cpp -o /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o
echo C++ /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o
g++ -c -std=c++11 -I/home/james/git/cppcmd1.0.0/src/../inc /home/james/git/cppcmd1.0.0/src/../src/cmdio.cpp -o /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o
echo Ar /home/james/git/cppcmd1.0.0/src/../lib/libcppcmd.a
ar -rcD /home/james/git/cppcmd1.0.0/src/../lib/libcppcmd.a   /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o  /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o
make -ts --no-print-directory

2.15 -o FILE, --old-file=FILE, --assume-old=FILE

将文件FILE视作旧文件,不重新编译它(Consider FILE to be very old and don’t remake it).

2.16 -O[TYPE], --output-sync[=TYPE]

按TYPE同步并行作业的输出(Synchronize output of parallel jobs by TYPE).

2.17 -p, --print-data-base

打印make内部的database(Print make’s internal database).

$ make -p

2.18 -q, --question

不运行任何命令,并且无输出。make只是返回一个查询状态。返回状态为0表示没有目标需要重建,1表示存在需要重建的目标,2表示有错误发生。(Run no recipe; exit status says if up to date).

$ make -q

2.19 -r, --no-builtin-rules

禁用内置的隐式规则(Disable the built-in implicit rules).

$ make -r

2.20 -R, --no-builtin-variables

禁用内置变量设置(Disable the built-in variable settings).

$ make -R

2.21 -s, --silent, --quiet

取消命令执行过程的打印(Don’t echo recipes).

cppcmd1.0.0$ make -s
C++ /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o
C++ /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o
Ar /home/james/git/cppcmd1.0.0/src/../lib/libcppcmd.a
C++ /home/james/git/cppcmd1.0.0/test/.obj/cmdtest.o
C++ /home/james/git/cppcmd1.0.0/test/.obj/test.o
Link /home/james/git/cppcmd1.0.0/test/../bin/test
cppcmd1.0.0$ make -s
cppcmd1.0.0$ 

2.22 -k, --keep-going

当一些目标无法make时继续编译(Keep going when some targets can’t be made).

$ make -k
$ make --keep-going

2.23 -S, --no-keep-going, --stop

关闭-k(Turns off -k).

$ make -S
$ make --no-keep-going 
$ make --stop

2.24 -t, --touch

Touch目标而不是重新make目标(Touch targets instead of remaking them).

:src$ make -t
make: 'all' is up to date.

2.25 --trace

打印跟踪信息(Print tracing information).

src$ make --trace
/home/james/git/cppcmd1.0.0/src/../mkfiles/lib.mk:34: target '/home/james/git/cppcmd1.0.0/src/.obj' does not exist
mkdir -p /home/james/git/cppcmd1.0.0/src/.obj
/home/james/git/cppcmd1.0.0/src/../mkfiles/lib.mk:27: update target '/home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o' due to: /home/james/git/cppcmd1.0.0/src/../src/cppcmd.cpp /home/james/git/cppcmd1.0.0/src/../src/cmdhelper.h /home/james/git/cppcmd1.0.0/src/.obj
echo C++ /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o
C++ /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o
g++ -c -std=c++11 -I/home/james/git/cppcmd1.0.0/src/../inc /home/james/git/cppcmd1.0.0/src/../src/cppcmd.cpp -o /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o
/home/james/git/cppcmd1.0.0/src/../mkfiles/lib.mk:27: update target '/home/james/git/cppcmd1.0.0/src/.obj/cmdio.o' due to: /home/james/git/cppcmd1.0.0/src/../src/cmdio.cpp /home/james/git/cppcmd1.0.0/src/../src/cmdhelper.h /home/james/git/cppcmd1.0.0/src/.obj
echo C++ /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o
C++ /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o
g++ -c -std=c++11 -I/home/james/git/cppcmd1.0.0/src/../inc /home/james/git/cppcmd1.0.0/src/../src/cmdio.cpp -o /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o
/home/james/git/cppcmd1.0.0/src/../mkfiles/lib.mk:19: update target '/home/james/git/cppcmd1.0.0/src/../lib/libcppcmd.a' due to: /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o /home/james/git/cppcmd1.0.0/src/../lib
echo Ar /home/james/git/cppcmd1.0.0/src/../lib/libcppcmd.a
Ar /home/james/git/cppcmd1.0.0/src/../lib/libcppcmd.a
ar -rcD /home/james/git/cppcmd1.0.0/src/../lib/libcppcmd.a   /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o  /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o
/home/james/git/cppcmd1.0.0/src/../mkfiles/lib.mk:16: update target 'all' due to: /home/james/git/cppcmd1.0.0/src/../lib/libcppcmd.a
make -ts --no-print-directory

2.26 -w, --print-directory

打印当前目录(Print the current directory).

cppcmd$ make -w
make: Entering directory '/home/james/git/cppcmd1.0.0'
make[1]: Entering directory '/home/james/git/cppcmd1.0.0/src'
C++ /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o
C++ /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o
Ar /home/james/git/cppcmd1.0.0/src/../lib/libcppcmd.a
make[1]: Leaving directory '/home/james/git/cppcmd1.0.0/src'
make[1]: Entering directory '/home/james/git/cppcmd1.0.0/test'
C++ /home/james/git/cppcmd1.0.0/test/.obj/cmdtest.o
C++ /home/james/git/cppcmd1.0.0/test/.obj/test.o
Link /home/james/git/cppcmd1.0.0/test/../bin/test
make[1]: Leaving directory '/home/james/git/cppcmd1.0.0/test'
make: Leaving directory '/home/james/git/cppcmd1.0.0'

2.27 --no-print-directory

关闭-w,即使它是隐式打开的(Turn off -w, even if it was turned on implicitly).

cppcmd$ make --no-print-directory
C++ /home/james/git/cppcmd1.0.0/src/.obj/cppcmd.o
C++ /home/james/git/cppcmd1.0.0/src/.obj/cmdio.o
Ar /home/james/git/cppcmd1.0.0/src/../lib/libcppcmd.a
C++ /home/james/git/cppcmd1.0.0/test/.obj/cmdtest.o
C++ /home/james/git/cppcmd1.0.0/test/.obj/test.o
Link /home/james/git/cppcmd1.0.0/test/../bin/test

2.28 -W FILE, --what-if=FILE, --new-file=FILE, --assume-new=FILE

设定文件FILE的时间戳为当前时间,但不改变文件实际的最后修改时间。此选项主要是为实现了对所有依赖于文件“FILE”的目标的强制重建(Consider FILE to be infinitely new).

$ make -W file.c

2.29 --warn-undefined-variables

引用未定义的变量时发出警告(Warn when an undefined variable is referenced).

$ make --warn-undefined-variables

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八股kafka(一)

目录 1、面试官&#xff1a;Kafka是如何保证消息不丢失 2、面试官&#xff1a;Kafka中消息的重复消费问题如何解决的 3、面试官&#xff1a;Kafka是如何保证消费的顺序性 4、面试官&#xff1a;Kafka的高可用机制有了解过嘛 5、面试官&#xff1a;解释一下复制机制中的ISR 6、面…

ChatGLM3-6B部署与微调及微调后使用

记录ChatGLM3-6B部署及官方Lora微调示例详细步骤及如何使用微调后的模型进行推理 一、下载代码 使用git clone 命令下载源码 git clone https://github.com/THUDM/ChatGLM3.git 如图所示 二、下载模型 模型权重文件从魔塔进行下载&#xff0c;不需要翻墙。权重文件比较大&…

人工智能对企业安全的影响与风险控制-内刊

题目&#xff1a;人工智能对企业安全的影响与风险控制 大纲&#xff1a; I. 引言 A. 人工智能的发展背景 B. 企业安全的重要性 C. 研究目的与意义 II. 人工智能对企业安全的影响 A. 人工智能对企业安全管理的优势 提高安全管理效率预测与防范潜在风险定制化安全策略 B. 人工…

好用的电商数据API接口分享(京东|淘宝天猫|1688商品详情数据API)

电商API接口主要用于帮助开发者将电商功能集成到自己的应用程序中&#xff0c;实现诸如商品检索、商品 价格数据获取、订单处理、支付、物流跟踪等功能。以下是一些常用的电商API接口提供商: 主流电商平台API&#xff1a; 淘宝开放平台&#xff1a;提供淘宝、天猫、1688等阿里…

低代码技术赋能未来乡村建设:创新与实践

引言 随着我国新型城镇化进程的推进&#xff0c;乡村建设正面临着前所未有的挑战。如何在有限的人力、物力、财力资源下&#xff0c;高效推动乡村建设&#xff0c;实现城乡一体化发展&#xff0c;成为当下亟待解决的问题。低代码技术作为一种创新性的解决方案&#xff0c;为未来…

【docker 】push 镜像到私服

查看镜像 docker images把这个hello-world 推送到私服 docker push hello-world:latest 报错了。不能推送。需要标记镜像 标记Docker镜像 docker tag hello-world:latest 192.168.2.1:5000/hello-world:latest 将Docker镜像推送到私服 docker push 192.168.2.1:5000/hello…

设计合理的IT运维服务目录:打造高效运维的蓝图

在数字化转型的浪潮中&#xff0c;一个设计合理、内容详尽的IT运维服务目录是连接服务提供者与消费者之间的桥梁&#xff0c;它不仅体现了服务设计的专业性&#xff0c;还直接影响着运维效率和服务质量。如何设计出既合理又高效的IT运维服务目录&#xff1f;让我们结合ITIL 4框…

了解 macOS 中的系统完整性保护 (SIP):开启与关闭

在 macOS 系统中&#xff0c;有一个名为系统完整性保护 (System Integrity Protection&#xff0c;SIP) 的重要功能。SIP 旨在保护系统文件和进程免受未经授权的访问和修改&#xff0c;从而提高系统的安全性和稳定性。然而&#xff0c;在某些情况下&#xff0c;用户可能需要临时…

【全开源】JAVA台球助教台球教练多端系统源码支持微信小程序+微信公众号+H5+APP

功能介绍 球厅端&#xff1a;球厅认证、教练人数、教练的位置记录、助教申请、我的项目、签到记录、我的钱包、数据统计 教练端&#xff1a;我的页面&#xff0c;数据统计、订单详情、保证金、实名认证、服务管理、紧急求助、签到功能 用户端&#xff1a;精准分类、我的助教…

Spring线程池配置

配置Spring线程池,特别是ThreadPoolTaskExecutor,通常涉及设置一些关键参数以控制线程池的行为和性能。以下是一些基本的配置步骤: 定义配置类 首先,需要创建一个配置类,使用@Configuration注解标记,并启用异步执行功能,使用@EnableAsync注解。 @Configuration @Enab…

Maven的使用

1.第一个Maven工程 1.1 创建约定目录结构 ​ Hello ​ src ​ ——main(存放主程序) ​ ————java(存放源代码文件) ​ ————resources(存放配置文件和资源文件) ​ ——test(存放测试程序) ​ ————java ​ ————resources ​ pom.xml 1.2 创建核心文件 pom.xml …

mysql等保测评2.0命令-三级

版本 Win默认安装位置 C:\Program Files\MySQL\MySQL Server 8.0\bin 版本&#xff1a;select version() from dual; 身份鉴别 a应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换&#xff1b; 1、SELEC…

新能源汽车中HEV与PHEV分别代表什么车型,它们与传统燃油车都有什么区别?

前言 新能源汽车正逐渐成为全球汽车工业的主流方向&#xff0c;而HEV&#xff08;Hybrid Electric Vehicle&#xff09;和PHEV&#xff08;Plug-in Hybrid Electric Vehicle&#xff09;这两种混合动力车型在这一转型过程中扮演着重要角色。下面我们详细探讨HEV与PHEV的定义&a…

VSCODE + SSH for PHP 配置

清理Vscode的缓存 C:\Users\Administrator\AppData\Roaming\Code 删除 Cache 和 CachedData 应用的扩展 Remote SSHphpcs - php psr12规范PHP DocBlocker - phpDoc注释PHP Debug - php xdebug 调试PHP Intelephense - php语法检查PHP Namespace Resolver - php命名空间引用…

MySQL系统变量

MySQL的系统变量是由MySQL服务器管理的&#xff0c;用于控制服务器的各种行为和特性。这些变量由系统提供&#xff0c;不是用户定义的&#xff0c;并且属于服务器层面的语法。它们包括全局变量和会话变量。 全局变量&#xff1a;这些变量影响整个MySQL服务器&#xff0c;它们的…

RAG查询改写方法概述

在RAG系统中&#xff0c;用户的查询是丰富多样的&#xff0c;可能存在措辞不准确和缺乏语义信息的问题。这导致使用原始的查询可能无法有效检索到目标文档。 因此&#xff0c;将用户查询的语义空间与文档的语义空间对齐至关重要&#xff0c;目前主要有查询改写和嵌入转换两种方…

扫码查看文件是如何实现的?文件活码在线生成的方法

现在很多场景下会通过扫码的方式来查看文件&#xff0c;这种方式可以让更多的人同时通过扫码的方式来查看二维码&#xff0c;有利于文件的快速分享以及用户获取内容的个人体验&#xff0c;而且可以保护文件的安全性&#xff0c;那么如何制作文件二维码呢&#xff1f; 文件二维…

unity中计算摄像机水平FOV的公式是什么

在Unity中&#xff0c;水平视野&#xff08;Horizontal FOV&#xff09;通常不是直接通过公式来计算的&#xff0c;因为它是由垂直视野&#xff08;Vertical FOV&#xff09;和摄像机的宽高比&#xff08;Aspect Ratio&#xff09;自动计算得出的。然而&#xff0c;如果你知道垂…

中国211大学全部排名一览表

211大学是指中国教育部实施的名为“211工程”的高等教育发展战略中被选为重点支持的高等院校。这个名称来源于项目的启动背景和目标&#xff1a;“211”中的“21”代表21世纪&#xff0c;意味着该项目面向21世纪的中国高等教育发展&#xff1b;“1”则意指要重点建设大约100所左…

商机无限:实景无人自动直播软件带动实体店和电商行业新一波繁荣!

直播带货风潮的兴起确实是近年来电商行业的一个显著趋势。短视频平台的崛起为直播电商开辟了新的商业蓝海&#xff0c;商家们也纷纷加入到直播带货的行列中。然而&#xff0c;对于许多商家来说&#xff0c;找到合适的主播并不容易&#xff0c;这给他们带来了一定的困扰。hhgg加…