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. 我每天不得不吃一个鸡蛋,喝一些牛奶。

linux中make的用法

linux中make的用法

linux中make的用法
make是一个常用的Linux工具,主要用于自动化编译和链接程序。

在使用make之前,需要先编写Makefile文件,Makefile文件是一个文本文件,用于定义程序的编译规则和依赖关系。

Makefile 文件通常包含了以下几个部分:
1. 定义变量:可以定义一些变量,用于存储文件路径、编译器选项等信息。

2. 定义目标:每个目标对应一个编译规则,需要指定目标文件、依赖文件和编译命令。

3. 定义伪目标:伪目标不对应实际文件,用于执行一些特殊的操作,比如清除中间文件、生成文档等。

4. 定义变量操作:可以使用一些内置的函数对变量进行操作,比如替换字符串、添加后缀等。

使用make命令时,可以指定需要编译的目标,如果不指定则默认编译第一个目标。

make会自动分析依赖关系,只编译需要重新编译的文件,从而提高编译效率。

make支持一些常用的参数,比如-n表示只显示需要执行的命令而不实际执行,-j表示并行编译,-k表示继续执行其他目标即使某个目标编译失败。

总的来说,make是一个非常强大的工具,可以自动化编译和链接程序,大大简化了编译过程。

对于Linux开发者而言,掌握make 的用法是非常重要的。

make命令详解

make命令详解

make命令详解make命令详解make 命令是系统管理员和程序员⽤的最频繁的命令之⼀。

管理员⽤它通过命令⾏来编译和安装很多开源的⼯具,程序员⽤它来管理他们⼤型复杂的项⽬编译问题。

在执⾏ make 命令时,有的时候需要加上⼀下参数选项来保证我们的程序的执⾏,其实之前已经遇到过 make 在执⾏命令的时候需要添加上参数选项,⽐如只打印命令但不执⾏使⽤的参数是 "-n" ,还有只执命令不打印命令的参数选项是 "-s",包含其它⽂件的路径参数选项是 "-include"等等。

参数选项功能-b,-m忽略,提供其他版本 make 的兼容性-B,--always-make强制重建所有的规则⽬标,不根据规则的依赖描述决定是否重建⽬标⽂件。

-C DIR,--directory=DIR 在读取 Makefile 之前,进⼊到⽬录 DIR,然后执⾏ make。

当存在多个 "-C" 选项的时候,make 的最终⼯作⽬录是第⼀个⽬录的相对路径。

-d make 在执⾏的过程中打印出所有的调试信息,包括 make 认为那些⽂件需要重建,那些⽂件需要⽐较最后的修改时间、⽐较的结果,重建⽬标是⽤的命令,遗憾规则等等。

使⽤ "-d" 选项我们可以看到 make 构造依赖关系链、重建⽬标过程中的所有的信息。

--debug[=OPTIONS]make 执⾏时输出调试信息,可以使⽤ "OPTIONS" 控制调试信息的级别。

默认是 "OPTIONS=b" ,"OPTIONS"的可值为以下这些,⾸字母有效:all、basic、verbose、implicit、jobs、makefile。

-e,--enveronment-overrides使⽤环境变量定义覆盖 Makefile 中的同名变量定义。

cmak编译命令

cmak编译命令

cmak编译命令
CMake 是一个开源的跨平台的构建系统生成工具,它使用简单的配置文件来控制软件的编译过程。

下面是常见的 CMake 编译命令:
1.创建构建目录:
在项目根目录下执行以下命令创建一个构建目录(可以是任何目录,一般建议在项目根目录下创建一个名为 `build` 的目录):mkdir build
2.进入构建目录:
进入刚创建的构建目录:
cd build
3.运行 CMake:
在构建目录中运行 CMake 命令,并指定项目根目录,CMake 将读取项目根目录下的 `CMakeLists.txt` 文件并生成相应的构建文件(如 Makefile、Visual Studio 工程文件等):
cmake ..
4.编译项目:
使用生成的构建文件编译项目:
cmake --build .
以上命令将会根据 CMakeLists.txt 文件中的配置信息来生成项目的构建文件,并进行编译。

需要注意的是,上述命令仅适用于在 Unix/Linux 环境中使用 Makefile 进行构建。

在其他平台或使用其他构建工具时,可能需要进行相应的调整。

如果需要进行更多自定义配置,可以通过 CMake 命令行选项来指定,例如指定生成器类型、指定编译器、指定构建类型等。

1 / 1。

CMake使用教程

CMake使用教程

CMake使用教程CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。

通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。

CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。

如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。

总之,CMake是一个非常强大的编译自动配置工具,支持各种平台,KDE也是用它编译的,感兴趣的可以试用一下。

准备活动:(1)安装cmake。

下载地址:/cmake/resources/software.html根据自己的需要下载相应的包即可,Windows下可以下载zip压缩的绿色版本,还可以下载源代码。

(2)运行cmake的方法。

(GUI、命令行)/cmake/help/runningcmake.html CMake使用步骤:运行GUI的cmake界面:cmake-2.8.1-win32-x86/bin/cmake-gui.exe执行Configure:运行之后,生成了如下文件:生成Makefile:执行Generate之后生成如下文件:运行make进行编译:编译完成后,在build目录生成Tutorial.exe,运行Tutorial.exe 25就可以看到运行结果:运行make install安装程序:运行make test进行测试:通过cmake tutorial学习CMake配置方法/cmake/help/cmake_tutorial.html可以在源代码的Tests/Turorial目录中找到这个手册对应的代码。

cmake 教程

cmake 教程

cmake 教程CMake是一个开源的跨平台构建工具,用于管理和构建软件项目。

它使用简单的语法来描述构建过程,并生成相应的构建配置文件(如Makefile或Visual Studio项目文件),从而使构建过程变得自动化、可靠和可重复。

使用CMake构建项目的基本步骤如下:1. 创建CMakeLists.txt文件:在项目根目录下创建一个名为CMakeLists.txt的文件。

这个文件将用来描述项目的构建过程。

2. 设置CMake的最低版本:在CMakeLists.txt文件的开头,可以使用cmake_minimum_required命令设置CMake的最低版本号,以确保项目可以在支持所需功能的CMake版本上正确构建。

3. 定义项目名称:使用project命令来定义项目的名称。

这将在构建过程中用于生成构建配置文件和项目标识。

4. 添加源代码文件:使用add_executable或add_library命令来添加源代码文件和头文件。

这些命令将源代码文件和头文件关联到项目中,以便在构建过程中进行编译和链接。

5. 添加依赖库:如果项目需要依赖其他库文件,可以使用find_package命令来查找这些库。

然后使用target_link_libraries 命令将这些库链接到项目中。

6. 设置编译选项:使用set命令来设置编译选项,例如编译器选项、预处理器宏等。

可以使用target_compile_options命令为单个目标设置编译选项。

7. 指定安装目标:如果需要将项目安装到特定的位置,可以使用install命令来指定需要安装的目标文件和目标路径。

8. 生成构建配置文件:在项目根目录下创建一个build文件夹,然后在该文件夹中执行cmake命令。

CMake将根据CMakeLists.txt文件生成相应的构建配置文件。

9. 执行构建:进入build文件夹,执行make命令(对于Unix/Linux系统)或打开生成的Visual Studio项目文件(对于Windows系统)来执行构建过程。

cmake教程

cmake教程

cmake教程cmake是一个开源的跨平台构建工具,它可以自动生成Makefile或Visual Studio的解决方案文件,从而实现项目的编译和构建。

本教程将介绍cmake的基本用法和常见的用法示例。

1. 安装cmakecmake可以在官方网站上下载并安装,在安装完成后,可以使用命令行中的cmake命令进行操作。

2. 创建一个基本的C++项目首先,创建一个空的文件夹作为项目的根目录。

在此目录下,创建一个C++源文件(例如main.cpp),并添加一些基本的C++代码。

3. 创建CMakeLists.txt文件在项目根目录下,创建一个名为CMakeLists.txt的文件。

这个文件将包含cmake的构建指令。

4. 编写CMakeLists.txt打开CMakeLists.txt文件,并编写cmake的构建指令。

以下是一个简单的示例:```# 设置项目的名称project(MyProject)# 指定要编译的源文件add_executable(MyProject main.cpp)```这段代码指定了项目的名称为MyProject,并将main.cpp作为需要编译的源文件。

你可以根据需要修改项目名称和源文件的路径。

5. 构建项目在命令行中,进入到项目根目录,并执行以下命令进行构建:```cmake .make```第一个命令将会生成Makefile,第二个命令将会使用Makefile 进行项目的编译和构建。

6. 运行项目在构建成功后,可以通过以下命令运行项目:```./MyProject```如果一切正常,你将会看到程序输出的结果。

以上仅是cmake的基本使用方法,它还有很多更高级的特性和用法,比如添加依赖库、选择构建类型等等。

你可以通过查阅相关的文档和官方网站来学习更多关于cmake的知识。

Make命令完全详解教程

Make命令完全详解教程

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。

Make命令基础用法教程

Make命令基础用法教程

Make命令基础⽤法教程⽬录⼀、Make的概念⼆、Makefile⽂件的格式2.1 概述2.2 ⽬标(target)2.3 前置条件(prerequisites)2.4 命令(commands)三、Makefile⽂件的语法3.1 注释3.2 回声(echoing)3.3 通配符3.4 模式匹配3.5 变量和赋值符3.6 内置变量(Implicit Variables)3.7 ⾃动变量(Automatic Variables)3.8 判断和循环3.9 函数四、Makefile 的实例⼀、Make的概念Make这个词,英语的意思是"制作"。

Make命令直接⽤了这个意思,就是要做出某个⽂件。

⽐如,要做出⽂件a.txt,就可以执⾏下⾯的命令。

$ make a.txt但是,如果你真的输⼊这条命令,它并不会起作⽤。

因为Make命令本⾝并不知道,如何做出a.txt,需要有⼈告诉它,如何调⽤其他命令完成这个⽬标。

⽐如,假设⽂件 a.txt 依赖于 b.txt 和 c.txt ,是后⾯两个⽂件连接(cat命令)的产物。

那么,make 需要知道下⾯的规则。

a.txt:b.txtc.txtcat b.txt c.txt > a.txt也就是说,make a.txt 这条命令的背后,实际上分成两步:第⼀步,确认 b.txt 和 c.txt 必须已经存在,第⼆步使⽤ cat 命令将这个两个⽂件合并,输出为新⽂件。

像这样的规则,都写在⼀个叫做Makefile的⽂件中,Make命令依赖这个⽂件进⾏构建。

Makefile⽂件也可以写为makefile,或者⽤命令⾏参数指定为其他⽂件名。

$ make -f rules.txt# 或者$ make --file=rules.txt上⾯代码指定make命令依据rules.txt⽂件中的规则,进⾏构建。

总之,make只是⼀个根据指定的Shell命令进⾏构建的⼯具。

make指令mac用法

make指令mac用法

在macOS(Mac 操作系统)中,make 是一个命令行工具,通常用于构建和管理软件项目。

它读取一个名为Makefile 的文本文件,其中包含了一系列规则和依赖关系,用于描述如何构建项目中的各个组件。

基本的make 命令用法如下:
make [target]
其中[target] 是Makefile 中定义的一个目标(target),表示构建项目的特定部分。

如果未指定目标,则make 将尝试构建Makefile 中第一个目标。

以下是一些make 命令的常见用法:
构建默认目标:
make
指定目标:
make target_name
清理生成的文件:
make clean
这是一个常见的清理目标,通常在Makefile 中定义,用于删除构建过程中生成的文件。

列出所有目标:
make -p
这将显示Makefile 中定义的所有目标。

请注意,实际的make 命令和目标名称取决于您的具体项目和Makefile 的内容。

如果您在特定的项目中使用make,最好查看该项目的文档或Makefile 文件,以了解可用的目标和选项。

make 打印详细编译过程

make 打印详细编译过程

make 打印详细编译过程标题:详细编译过程编译是将源代码转化为可执行文件的过程,它包含了多个步骤,每个步骤都有其特定的功能。

本文将详细介绍编译过程的各个步骤。

1. 预处理(Preprocessing)在预处理阶段,编译器将对源代码进行处理,主要包括以下几个步骤:- 删除注释:源代码中的注释部分将被删除,以提高编译效率。

- 处理宏定义:将源代码中的宏定义替换为其对应的实际内容。

- 处理条件编译指令:根据条件编译指令的条件判断结果,选择性地保留或删除代码块。

2. 编译(Compilation)编译阶段是将预处理后的源代码翻译成汇编代码的过程,主要包括以下几个步骤:- 词法分析:将源代码分割成一个个的词法单元,如变量名、关键字等。

- 语法分析:根据语法规则,将词法单元组成语法树,以确定程序的结构和语法是否正确。

- 语义分析:对语法树进行分析,检查变量的声明和使用是否符合规范,进行类型检查等。

- 生成中间代码:将语法树转化为中间代码,如三地址码、四元式等。

3. 汇编(Assembly)汇编是将汇编代码转化为可重定位目标文件的过程,主要包括以下几个步骤:- 符号解析:将汇编代码中的符号(如变量名、函数名)与其对应的内存地址进行关联。

- 生成机器指令:将汇编代码转化为机器指令,以便计算机能够执行。

- 生成重定位信息:记录目标文件中需要进行重定位的位置,以便链接器在链接时进行修正。

4. 链接(Linking)链接是将多个目标文件合并成一个可执行文件的过程,主要包括以下几个步骤:- 地址和空间分配:确定目标文件在内存中的分配地址,并分配内存空间。

- 符号解析和重定位:将目标文件中的符号与其对应的内存地址进行关联,并修正重定位信息。

- 文件合并:将多个目标文件合并成一个可执行文件。

- 库文件链接:将程序所需的库文件链接到可执行文件中,以便程序能够调用库函数。

5. 加载(Loading)加载是将可执行文件从磁盘加载到内存并执行的过程,主要包括以下几个步骤:- 内存分配:将可执行文件所需的内存空间分配给程序。

linux系统中make的用法

linux系统中make的用法

linux系统中make的用法make是一个常用的Linux命令,用于自动化编译程序。

当有多个源文件需要编译成可执行文件时,手动一个个编译比较麻烦。

这时候,我们就可以使用make命令实现自动化编译。

make命令的基本用法为:在Makefile文件中定义编译规则和依赖关系,然后运行make命令即可自动编译程序。

Makefile是一个文本文件,可以使用vi、nano等编辑器创建和编辑。

make命令的常用参数如下:* -f 指定Makefile文件,默认为当前目录下的Makefile或makefile文件。

* -n 或 --just-print 只打印命令,而不实际执行。

* -j 指定同时执行的任务数,加快编译速度。

* clean 清除中间文件和可执行文件等生成的文件。

Makefile文件中的基本语法为:```target: prerequisitescommand```其中,target为编译目标,prerequisites为编译目标所依赖的文件,command为执行编译的命令。

例如:```hello: hello.cgcc -o hello hello.c```这个Makefile文件中定义了一个名为“hello”的编译目标,它依赖于名为“hello.c”的源文件,执行命令为“gcc -o hellohello.c”,即将hello.c编译成可执行文件hello。

使用make命令进行编译时,可以直接运行“make”(默认编译第一个目标),也可以指定要编译的目标,例如“make hello”。

当定义的目标有多个依赖时,可以使用“$^”表示所有依赖文件,“$@”表示目标文件。

例如:```main.exe: main.c module1.o module2.ogcc -o $@ $^```这个Makefile文件中定义了一个名为“main.exe”的编译目标,它依赖于名为“main.c”、“module1.o”、“module2.o”的文件,执行命令为“gcc -o $@ $^”,即将这三个文件编译成可执行文件main.exe。

linux的make命令使用方法常用选项有哪些

linux的make命令使用方法常用选项有哪些

linux的make命令使用方法常用选项有哪些推荐文章Linux下常用安全策略设置方法有哪些热度: linux 用户和组命令有哪些使用方法热度: ubuntu下linux常用指令有哪些使用教程热度:linux有哪些常用特殊字符用法是什么热度:Linux常用权限有哪些s权限和t权限区别热度:Linux系统下make命令的关键是找出上一次各个文件的修改时间,利用此修改时间来比较相依赖文件最后一次修改的时间。

减少不必要的编译工作,提高效率,具体怎么使用呢?下面由店铺为大家整理了linux的make命令的相关知识,希望大家喜欢!linux的make命令详解make命令的一般格式:make【选项】【make描述文件】【宏定义】【目的文件】make首先分析所有的宏定义参数(带嵌入等号的参数)并进行赋值,宏命令行覆盖在makefile中进行的定义,然后检验选项标志,最后递归的对每一个目的依赖文件进行检查。

unix下常用的选项如下:f file 指定file文件为描述文件,如果file参数为"-"符,那么描述文件指向标准输入。

如果没有"-f"参数,则系统将默认当前目录下名为makefile或者名为Makefile的文件为描述文件。

在Linux中,GNU make工具在当前工作目录中按照GNUmakefile、makefile、Makefile的顺序搜索 makefile文件。

-i 忽略命令执行返回的出错信息。

-s 沉默模式,在执行之前不输出相应的命令行信息。

-r 禁止使用build-in规则。

-n 非执行模式,输出所有执行命令,但并不执行。

-t 更新目标文件。

-q make操作将根据目标文件是否已经更新返回"0"或非"0"的状态信息。

-p 输出所有宏定义和目标文件描述。

-d Debug模式,输出有关文件和检测时间的详细信息。

Linux下常用选项与Unix系统中稍有不同,下面是不同的部分:-c dir 在读取 makefile 之前改变到指定的目录dir。

  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又不知道如何建立它,所以只好报告错误。

相关文档
最新文档