Make命令完全详解教程

合集下载

Make 命令参数详解

Make 命令参数详解

Make 命令参数详解通过在命令行中指定make命令的选项,可使make以不同的方式运行。

Make命令的主要选项参数如下所示。

●-C dir或者–directory=DIR。

在读取Makefile文件前,先切换到“dir”目录下,即把dir作为当前目录。

如果存在多个-C现象make的最终当前目录是第一个目录的相对路径。

●-dmake 执行是打印出所有的调试信息。

●-e或者—environment-overrides。

●-f filename或者–file=FILE或者–makefile=FILE使用执行文件作为makefile文件●-i 或者–ignore-errors。

忽略执行Makefile中命令时产生的错误,不退出make。

●-h 或者–help打印帮助信息●-k 或者–keep-going。

执行命令遇到错误时不终止make的执行,make尽最大可能执行所有的命令,直到出现致命错误才终止。

●-n或者—just-print或者—dry-run。

只打印出要执行的命令,但不执行命令。

●-o filename 或者–old-file=FILE。

指定文件“filename”不需要重建,即使相对于它的依赖已经过时,同时也不重建依赖于此文件的任何目标文件。

●-p或者—print-data-base命令执行之前,打印出make读取的Makefile的所有数据(包括规则和变量的值),同时打印出make的版本信息。

如果只需要打印这些数据信息而不执行命令,可以使用“make -qp”命令。

查看make执行前的隐含规则和预定义变量,可以使用命令“make –p-f /dev/null”。

●-q或者—question称为“询问模式”,不执行任何命令。

Make只是返回一个查询状态值,返回的状态值为0表示没有目标需要重建,1表示存在需要重建的目标,2表示有错误发生。

●-s或者- -silent。

执行但不显示所执行的命令。

linux中的make命令的详细解释

linux中的make命令的详细解释

linux中的make命令的详细解释linxu下的make命令是一个GNU下的工程化编译工具。

下面由店铺为大家整理了linux的make命令的详细解释的相关知识,希望对大家有帮助!一、linux中的make命令的详细解释make命令是GNU的工程化编译工具,用于编译众多相互关联的源代码问价,以实现工程化的管理,提高开发效率。

语法make(选项)(参数)选项-f:指定“makefile”文件;-i:忽略命令执行返回的出错信息;-s:沉默模式,在执行之前不输出相应的命令行信息;-r:禁止使用build-in规则;-n:非执行模式,输出所有执行命令,但并不执行;-t:更新目标文件;-q:make操作将根据目标文件是否已经更新返回"0"或非"0"的状态信息;-p:输出所有宏定义和目标文件描述;-d:Debug模式,输出有关文件和检测时间的详细信息。

Linux下常用选项与Unix系统中稍有不同,下面是不同的部分:-c dir:在读取 makefile 之前改变到指定的目录dir;-I dir:当包含其他 makefile文件时,利用该选项指定搜索目录;-h:help文挡,显示所有的make选项;-w:在处理 makefile 之前和之后,都显示工作目录。

参数目标:指定编译目标。

二、Linux中的make命令详解实例1. 一个简单的例子为了编译整个工程,你可以简单的使用 make 或者在 make 命令后带上目标 all。

$ makegcc -c -Wall test.cgcc -c -Wall anotherTest.cgcc -Wall test.o anotherTest.o -o test你能看到 make 命令第一次创建的依赖以及实际的目标。

如果你再次查看目录内容,里面多了一些 .o 文件和执行文件:$ lsanotherTest.c anotherTest.o Makefile test test.c test.h test.o 现在,假设你对 test.c 文件做了一些修改,重新使用 make 编译工程:$ makegcc -c -Wall test.cgcc -Wall test.o anotherTest.o -o test你可以看到只有 test.o 重新编译了,然而另一个 Test.o 没有重新编译。

超详细的cmake入门教程

超详细的cmake入门教程

超详细的cmake⼊门教程什么是cmake你或许听过好⼏种 Make ⼯具,例如 GNU Make ,QT 的 qmake ,微软的 MSnmake,BSD Make(pmake),Makepp,等等。

这些 Make ⼯具遵循着不同的规范和标准,所执⾏的 Makefile 格式也千差万别。

这样就带来了⼀个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。

⽽如果使⽤上⾯的 Make ⼯具,就得为每⼀种标准写⼀次 Makefile ,这将是⼀件让⼈抓狂的⼯作。

CMake CMake附图 1 CMake就是针对上⾯问题所设计的⼯具:它⾸先允许开发者编写⼀种平台⽆关的 CMakeList.txt ⽂件来定制整个编译流程,然后再根据⽬标⽤户的平台进⼀步⽣成所需的本地化 Makefile 和⼯程⽂件,如 Unix 的 Makefile 或Windows 的 Visual Studio ⼯程。

从⽽做到“Write once, run everywhere”。

显然,CMake 是⼀个⽐上述⼏种 make 更⾼级的编译配置⼯具。

⼀些使⽤ CMake 作为项⽬架构系统的知名开源项⽬有 VTK、ITK、KDE、OpenCV、OSG 等。

在 linux 平台下使⽤ CMake ⽣成 Makefile 并编译的流程如下:1. 编写 CMake 配置⽂件 CMakeLists.txt 。

2. 执⾏命令 cmake PATH 或者 ccmake PATH ⽣成 Makefile。

其中, PATH 是 CMakeLists.txt 所在的⽬录。

(ccmake 和cmake 的区别在于前者提供了⼀个交互式的界⾯)3. 使⽤ make 命令进⾏编译。

⼊门案例:单个源⽂件本节对应的源代码所在⽬录:Demo1。

对于简单的项⽬,只需要写⼏⾏代码就可以了。

例如,假设现在我们的项⽬中只有⼀个源⽂件 ,该程序的⽤途是计算⼀个数的指数幂。

Linux命令详解(三).configure、make、makeinstall命令

Linux命令详解(三).configure、make、makeinstall命令

Linux命令详解(三).configure、make、makeinstall命令这些都是典型的使⽤GNU的AUTOCONF和AUTOMAKE产⽣的程序的安装步骤⼀、基本信息 1、./configure 是⽤来检测你的安装平台的⽬标特征的。

⽐如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。

2、make 是⽤来编译的,它从Makefile中读取指令,然后编译。

3、make install是⽤来安装的,它也从Makefile中读取指令,安装到指定的位置。

注意:AUTOMAKE和AUTOCONF是⾮常有⽤的⽤来发布C程序的东西。

⼆、详细解释 1、configure命令 这⼀步⼀般⽤来⽣成 Makefile,为下⼀步的编译做准备,你可以通过在 configure 后加上参数来对安装进⾏控制,⽐如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下⾯,执⾏⽂件就会安装在 /usr/bin (⽽不是默认的 /usr/local/bin),资源⽂件就会安装在/usr/share(⽽不是默认的/usr/local/share)。

同时⼀些软件的配置⽂件你可以通过指定 –sys-config= 参数进⾏设定。

有⼀些软件还可以加上–with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。

2、make 这⼀步就是编译,⼤多数的源代码包都经过这⼀步进⾏编译(当然有些perl或python编写的软件需要调⽤perl或python来进⾏编译)。

如果在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后⼀⾏),然后你可以向开发者提交 bugreport(⼀般在 INSTALL ⾥有提交地址),或者你的系统少了⼀些依赖库等,这些需要⾃⼰仔细研究错误代码。

make 常用命令

make 常用命令

make 常用命令Make是一个流行的构建工具,它可以自动化编译、测试和部署应用程序。

在本文中,我们将介绍make的一些常用命令,以帮助您更好地使用这个强大的工具。

1. makemake命令是最基本的命令,用于编译和构建项目。

它可以根据Makefile文件中的规则来生成目标文件。

例如,要编译一个名为hello的程序,可以使用以下命令:```make hello```2. make cleanmake clean命令可以清除所有生成的目标文件和中间文件。

这个命令特别有用,因为它可以确保你从一个干净的状态开始编译。

例如,要清除所有生成的文件,可以使用以下命令:```make clean```3. make installmake install命令可以将已编译的程序安装到系统中。

这个命令通常需要root权限,因为它会将文件安装到系统目录中。

例如,要安装一个名为hello的程序,可以使用以下命令:```make install```4. make distcleanmake distclean命令可以清除所有生成的文件和配置文件。

这个命令比make clean更彻底,因为它还会清除Makefile文件和其他配置文件。

例如,要清除所有生成的文件和配置文件,可以使用以下命令:```make distclean```5. make checkmake check命令可以运行程序的测试套件,并确保程序按预期工作。

这个命令通常需要编写测试代码,以确保程序的正确性。

例如,要运行一个名为hello的测试套件,可以使用以下命令:```make check```6. make debugmake debug命令可以生成一个调试版本的程序,以便您可以在调试器中调试它。

这个命令通常需要在编译选项中添加调试信息。

例如,要生成一个名为hello的调试版本,可以使用以下命令:```make debug hello```7. make distmake dist命令可以生成一个归档文件,其中包含源代码和Makefile文件。

make的用法归纳总结

make的用法归纳总结

make的用法归纳总结一、简介作为英语中常用的动词,"make"在不同的语境中具有多种用法。

它可以表达创造、制造、做某事或使某情况发生等含义。

本文将对"make"的各种用法进行归纳总结,以帮助读者更好地理解和运用这个常见动词。

二、表示制造或生产1. "make" + 名词这是最基本的用法,表示通过某种手段或过程进行制造或生产某物。

例如:"make a cake"(制作蛋糕)。

2. "make" + 形容词 + 名词在这种结构中,形容词描述了所要制造或生产物品的特征或属性。

例如:"make a wooden table"(制作一张木桌子)。

3. "make" + 编号/型号/尺寸等描述当需要指定所要制造或生产物品的具体规格时,可以使用这个结构。

例如:"make ten copies of the report"(复印十份报告)。

三、表示实现、完成或成功1. "make it"这个短语表示成功到达某个目标、位置或约定地点。

例如:"I have to hurry if I want to make it to the meeting on time."(如果我想准时参加会议,我必须赶紧。

)2. "make a goal/target/deadline"这个结构表示成功实现目标、达到目标或完成任务。

例如:"We need to work hard in order to make the sales target for this quarter."(为了达到本季度的销售目标,我们需要努力工作。

)四、表示引起某种情感或心理状态1. "make" + 宾语 + 形容词这个结构表示通过某种行为或事件引起某人某种情感或心理状态。

make用法详解

make用法详解

make用法详解1. 当make的意思是“做、制造、制作”时,常用的句型是:(1) make sth. (to do sth.) 意为“制造某物”。

例如:She can make kites. 她会制作风筝。

(2) make sb. sth. / make sth. for sb. 意为“为某人制作某物”。

例如:His mother made him a beautiful coat. / His mother made a beautiful coat for him. 他的母亲为他缝制了一件漂亮的外衣。

(3) 被动语态中常用be made of / from, 比较 be made of 与 be made from:两者均表示“由……制成”,但前者通常表示在制成品中还看得出原材料,而后者则通常表示在制成品中看不出原材料be made in, be made by等短语来表示“……是由……制成的”,“……是在……制成的”和“……是被……制成的”。

比较 be make out of 与 be made into:前者表示“由……制成”,后者表示“制成……”。

两者有时可互换,并且根据情况也可与上面两个句型互换(注意词序的变化)。

例如:Wine is made from grapes. 酒是由葡萄酿制成的。

These cars were made in Changchun. 这些汽车是在长春制造的。

2. 当make的意思是“使、使得”时,一般用于“make + 宾语 + 宾补”这种结构,常用的句型是:(1) make + sb. / sth. + adj. 意为“使某人或某物处于某种状态”。

例如:The news made him happy. 这个消息使他很高兴。

在此句型中,通常用it作形式宾语,而动词不定式或从句才是真正的宾语,而且要后置。

例如:Computers make it easier to learn English. 电脑使英语学习更加容易。

(完整版)make的用法

(完整版)make的用法

make用作使役动词表示“使;使成为” 时,可跟复合结构,即“make+宾语+宾语补足语",其中的宾语补足语可以是不带to的不定式、过去分词、形容词或名词。

现将make的复合宾语结构小结如下:一、“make+宾语+n。

" 意为“使、让某人/ 某物(成为)……".如:We made him captain of our football team. 我们推选他作我们足球队队长。

We made him our monitor. 我们选他当班长.二、“make+宾语+a dj.” 意为“使某人/ 某事(变得)……".如:The news that our team had won made us very happy. 我们队赢了的消息使我们大家非常高兴。

We must make the rivers clean. 我们必须净化河水.友情提示:当宾语是不定式短语或从句时,多用it作形式宾语。

如:I made it a condition that everybody must be on time。

我提出一个条件,人人都要准时。

The heavy rain made it impossible for us to go out. 大雨使得我们无法出去。

三、“make+宾语+do sth.(不带to的不定式)”意为“使某人做某事”。

如:What makes the grass grow? 什么东西使得草生长?Our teacher makes us feel more confident。

老师使得我们感到更自信了。

友情提示:在被动语态中,此类结构中省略的动词不定式to 要还原。

如:The boy was made to work twelve hours a day. 这个男孩被迫每天干十二个小时的活。

Every day I am made to have an egg and some milk. 我每天不得不吃一个鸡蛋,喝一些牛奶。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Make命令完全详解教程无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。

不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。

利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。

而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。

而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。

因此,有效的利用make和makefile工具可以大大提高项目开发的效率。

同时掌握make和makefile之后,您也不会再面对着Linux下的应用软件手足无措了。

一、Make程序的命令行选项和参数Make命令参数的典型序列如下所示:make [-f makefile文件名][选项][宏定义][目标]这里用[]括起来的表示是可选的。

命令行选项由破折号“–”指明,后面跟选项,如也可以每个选项使用一个破折号,如甚至混合使用也行,如Make命令本身的命令行选项较多,这里只介绍在开发程序时最为常用的三个,它们是:–k:如果使用该选项,即使make程序遇到错误也会继续向下运行;如果没有该选项,在遇到第一个错误时make程序马上就会停止,那么后面的错误情况就不得而知了。

我们可以利用这个选项来查出所有有编译问题的源文件。

–n:该选项使make程序进入非执行模式,也就是说将原来应该执行的命令输出,而不是执行。

–f :指定作为makefile的文件的名称。

如果不用该选项,那么make程序首先在当前目录查找名为makefile的文件,如果没有找到,它就会转而查找名为Makefile的文件。

如果您在Linux下使用GNU Make的话,它会首先查找GNUmakefile,之后再搜索makefile和Makefile。

按照惯例,许多Linux程序员使用Makefile,因为这样能使Makefile出现在目录中所有以小写字母命名的文件的前面。

所以,最好不要使用GNUmakefile这一名称,因为它只适用于make程序的GNU版本。

当我们想构建指定目标的时候,比如要生成某个可执行文件,那么就可以在make命令行中给出该目标的名称;如果命令行中没有给出目标的话,make命令会设法构建makefile中的第一个目标。

我们可以利用这一特点,将all作为makefile中的第一个目标,然后将让目标作为all所依赖的目标,这样,当命令行中没有给出目标时,也能确保它会被构建。

二、Makefile概述上面提到,make命令对于构建具有多个源文件的程序有很大的帮助。

事实上,只有make命令还是不够的,前面说过还必用须makefile告诉它要做什么以及怎么做才行,对于程序开发而言,就是告诉make命令应用程序的组织情况。

我们现在对makefile的位置和数量简单说一下。

一般情况下,makefile会跟项目的源文件放在同一个目录中。

另外,系统中可以有多个makefile,一般说来一个项目使用一个makefile就可以了;如果项目很大的话,我们就可以考虑将它分成较小的部分,然后用不同的makefile来管理项目的不同部分。

make命令和Makefile配合使用,能给我们的项目管理带来极大的便利,除了用于管理源代码的编译之外,还用于建立手册页,同时还能将应用程序安装到指定的目录。

因为Makefile用于描述系统中模块之间的相互依赖关系,以及产生目标文件所要执行的命令,所以,一个makefile由依赖关系和规则两部分内容组成。

下面分别加以解释。

依赖关系由一个目标和一组该目标所依赖的源文件组成。

这里所说的目标就是将要创建或更新的文件,最常见的是可执行文件。

规则用来说明怎样使用所依赖得文件来建立目标文件。

当make命令运行时,会读取makefile来确定要建立的目标文件或其他文件,然后对源文件的日期和时间进行比较,从而决定使用那些规则来创建目标文件。

一般情况下,在建立起最终的目标文件之前,肯定免不了要建立一些中间性质的目标文件。

这时,Make命令也是使用makefile来确定这些目标文件的创建顺序,以及用于它们的规则序列。

2.1.Makefile中的依赖关系make程序自动生成和维护通常是可执行模块或应用程序的目标,目标的状态取决于它所依赖的那些模块的状态。

Make的思想是为每一块模块都设置一个时间标记,然后根据时间标记和依赖关系来决定哪一些文件需要更新。

一旦依赖模块的状态改变了,make就会根据时间标记的新旧执行预先定义的一组命令来生成新的目标。

依赖关系规定了最终得到的应用程序跟生成它的各个源文件之间的关系。

如下面的图1描述了可执行文件main对所有的源程序文件及其编译产生的目标文件之间的依赖关系,见下图:图1 模块间的依赖关系就图1而言,我们可以说可执行程序main依赖于main.o、f1.o和ff1.o。

与此同时,main.o依赖于main.c和def1.h;f1.o依赖于f1.c、def1.h和def2.h;而ff1.o则依赖于ff1.c、def2.h和def3. h。

在makefile中,我们可以用目标名称,加冒号,后跟空格键或tab键,再加上由空格键或tab键分隔的一组用于生产目标模块的文件来描述模块之间的依赖关系对于上例来说,可以作以下描述:不难发现,上面的各个源文件跟各模块之间的关系具有一个明显的层次结构,如果def2.h发生了变化,那么就需要更新f1.o和f2.o,而f1.o和f2.o发生了变化的话,那么main也需要随之重新构建。

默认时,make程序只更新makefile中的第一个目标,如果希望更新多个目标文件的话,可以使用一个特殊的目标all,假如我们想在一个makefile中更新main 和hello这两个程序文件的话,可以加入下列语句达到这个目的:实际上,makefile是以相关行为基本单位的,相关行用来描述目标、模块及规则(即命令行)三者之间的关系。

一个相关行格式通常为:冒号左边是目标(模块)名;冒号右边是目标所依赖的模块名;紧跟着的规则(即命令行)是由依赖模块产生目标所使用的命令。

相关行的格式为:习惯上写成多行形式,如下所示:要执行的动作,如“clean”。

依赖(DEPENDENCIES)是用来产生目标的输入文件,一个目标通常依赖于多个文件。

命令(COMMAND)是make执行的动作,一个可以有多个命令,每个占一行。

注意:每个命令行的起始字符必须为TAB字符!有依赖关系规则中的命令通常在依赖文件变化时负责产生target文件,make 执行这些命令更新或产生target。

规则可以没有依赖关系,如包含target “clean”的规则。

规则解释如何和何时重做该规则中的文件,make根据依赖关系执行产生或更新目标;规则也说明如何和何时执行动作。

有的规则看起来很复杂,但都符合上述模式。

需要注意的是,如果相关行写成一行,“命令”之前用分号“;”隔开,如果分成多行书写的话,后续的行务必以tab字符为先导。

对于makefile而言,空格字符和tab字符是不同的。

所有规则所在的行必须以tab键开头,而不是空格键。

初学者一定对此保持警惕,因为这是新手最容易疏忽的地方,因为几个空格键跟一个tab 键在肉眼是看不出区别的,但make命令却能明察秋毫。

此外,如果在makefile文件中的行尾加上空格键的话,也会导致make命令运行失败。

所以,大家一定要小心了,免得耽误许多时间。

例,一个名为prog的程序由三个C源文件filea.c、fileb.c和filec.c以及库文件LS 编译生成,这三个文件还分别包含自己的头文件a.h 、b.h和c.h。

通常情况下,C 编译器将会输出三个目标文件filea.o、fileb.o和filec.o。

假设filea.c和fileb.c都要声明用到一个名为defs的文件,但filec.c不用。

即在filea.c和fileb.c里都有这样的声明:#include "defs"那么下面的文档就描述了这些文件之间的相互联系:line1 #It is a example for describing makefile2 prog : filea.o fileb.o filec.o3 cc filea.o fileb.o filec.o -LS -o prog4 filea.o : filea.c a.h defs5 cc -c filea.c6 fileb.o : fileb.c b.h defs7 cc -c fileb.c8 filec.o : filec.c c.h9 cc -c filec.c这个描述文档就是一个简单的makefile文件。

从上面的例子注意到,第一个字符为# 的行为注释行。

第一个非注释行指定prog由三个目标文件filea.o、fileb.o和filec.o链接生成。

第三行描述了如何从prog所依赖的文件建立可执行文件。

接下来的4、6、8行分别指定三个目标文件,以及它们所依赖的.c和.h文件以及defs文件。

而5、7、9行则指定了如何从目标所依赖的文件建立目标。

当filea.c或a.h文件在编译之后又被修改,则make 工具可自动重新编译filea.o,如果在前后两次编译之间,filea.C 和a.h 均没有被修改,而且test.o 还存在的话,就没有必要重新编译。

这种依赖关系在多源文件的程序编译中尤其重要。

通过这种依赖关系的定义,make 工具可避免许多不必要的编译工作。

当然,利用Shell 脚本也可以达到自动编译的效果,但是,Shell 脚本将全部编译任何源文件,包括哪些不必要重新编译的源文件,而make 工具则可根据目标上一次编译的时间和目标所依赖的源文件的更新时间而自动判断应当编译哪个源文件。

2.2.Makefile文件举例根据图1的依赖关系,这里给出了一个完整的makefile文件,这个例子很简单,由四个相关行组成,我们将其命名为mymakefile1。

文件内容如下所示:或者Makefile ,所以一定要在make命令行中加上-f选项。

如果在没有任何源码的目录下执行命令“make -f Mymakefile1”的话,将收到下面的消息:Make命令将makefile中的第一个目标即main作为要构建的文件,所以它会寻找构建该文件所需要的其他模块,并判断出必须使用一个称为main.c的文件。

因为迄今尚未建立该文件,而makefile又不知道如何建立它,所以只好报告错误。

相关文档
最新文档