makefile指令详解

合集下载

linux系统命令make、clean的用法讲解

linux系统命令make、clean的用法讲解

linux系统命令make、clean的⽤法讲解先先看⼀下什么是makefilemakefile定义了⼀系列的规则来指定,哪些⽂件需要先编译,哪些⽂件需要后编译,哪些⽂件需要重新编译,甚⾄于进⾏更复杂的功能操作,因为 makefile就像⼀个Shell脚本⼀样,其中也可以执⾏操作系统的命令。

makefile带来的好处就是--“⾃动化编译”,⼀旦写好,只需要⼀个make命令,整个⼯程完全⾃动编译,极⼤的提⾼了软件开发的效率。

make是⼀个命令⼯具,是⼀个解释makefile中指令的命令⼯具,⼀般来说,⼤多数的IDE都有这个命令,⽐如:Delphi 的make,Visual C++的nmake,Linux下GNU的make.可见,makefile都成为了⼀种在⼯程⽅⾯的编译⽅法。

make根据Makefile⽂件编译源代码、连接、⽣成⽬标⽂件、可执⾏⽂件。

make clean清除上次的make命令所产⽣的object⽂件(后缀为“.o”的⽂件)及可执⾏⽂件。

make install将编译成功的可执⾏⽂件安装到系统⽬录中,⼀般为/usr/local/bin⽬录。

make dist产⽣发布软件包⽂件(即distribution package)。

这个命令将会将可执⾏⽂件及相关⽂件打包成⼀个tar.gz压缩的⽂件⽤来作为发布软件的软件包。

它会在当前⽬录下⽣成⼀个名字类似“PACKAGE-VERSION.tar.gz”的⽂件。

PACKAGE和VERSION,是我们在configure.in中定义的AM_INIT_AUTOMAKE(PACKAGE, VERSION)。

make distcheck⽣成发布软件包并对其进⾏测试检查,以确定发布包的正确性。

这个操作将⾃动把压缩包⽂件解开,然后执⾏configure命令,并且执⾏make,来确认编译不出现错误,最后提⽰你软件包已经准备好,可以发布了。

make distclean类似make clean,但同时也将configure⽣成的⽂件全部删除掉,包括Makefile⽂件。

makefile中使用cp命令

makefile中使用cp命令

makefile中使用cp命令介绍在编写软件项目时,为了方便管理和构建代码,我们通常会使用makefile来自动化构建过程。

makefile是一种用于描述代码构建规则的文件,其中可以包含各种命令和指令。

其中,cp命令是makefile中常用的一个命令,用于复制文件或目录。

cp命令的基本用法cp命令的基本语法如下:cp [选项] 源文件目标文件其中,选项可以用来指定一些复制的行为,例如是否覆盖目标文件、是否保留源文件的属性等。

源文件是要复制的文件或目录,目标文件是复制后的文件或目录的名称。

cp命令的常见选项cp命令有许多选项可以用来控制复制的行为,下面是一些常见的选项: - -r:递归地复制目录及其内容。

- -f:强制复制,即使目标文件已经存在也进行复制。

- -i:交互式复制,如果目标文件已经存在,会询问是否覆盖。

- -p:保留源文件的属性,包括权限、时间戳等。

- -u:只复制更新的文件,即只复制源文件比目标文件新的文件。

- -v:显示详细的复制过程。

使用cp命令复制文件在makefile中使用cp命令复制文件可以方便地将源文件复制到目标文件中。

下面是一个简单的示例:all:cp source_file.txt target_file.txt上述示例中,我们使用了makefile的规则,其中all是规则的目标,cpsource_file.txt target_file.txt是规则的命令。

当我们运行make命令时,makefile会根据规则执行相应的命令,从而完成文件的复制。

使用cp命令复制目录除了复制文件,cp命令还可以复制目录及其内容。

在makefile中,我们可以使用cp命令的-r选项来递归地复制目录。

下面是一个示例:all:cp -r source_directory target_directory上述示例中,我们使用了-r选项来递归地复制source_directory目录及其内容到target_directory目录中。

make makefile 的参数

make makefile 的参数

make makefile 的参数make是一个常用的构建工具,用于自动化编译和构建软件项目。

makefile是make工具的配置文件,用于描述项目的构建规则和依赖关系。

本文将介绍makefile的参数,包括常用的参数及其用法。

一、常用参数及其用法1. -f 文件名:指定makefile的文件名,默认为"makefile"或"Makefile"。

通过该参数,可以使用其他名称的makefile文件。

2. -C 目录:指定make命令的工作目录。

在执行make命令时,会切换到指定的目录,并在该目录下查找makefile文件进行构建。

3. -n:显示执行make命令时的操作,但不实际执行。

通过该参数,可以预览make命令的执行过程,检查构建规则是否正确。

4. -p:显示make命令的内置变量和规则。

通过该参数,可以查看make命令的内部工作机制,了解makefile文件的编写规则和使用方法。

5. -B:强制重新构建目标文件。

通过该参数,可以忽略文件的时间戳,强制重新执行构建规则,生成新的目标文件。

6. -j 并发数:指定make命令的并发执行数。

通过该参数,可以提高构建速度,同时执行多个任务。

7. -s:静默模式,不显示执行的命令。

通过该参数,可以减少输出信息,使构建过程更加清晰。

二、makefile的构建规则makefile由一系列构建规则组成,每个规则定义了目标文件、依赖文件和构建命令。

make命令根据构建规则,自动判断需要更新的文件,并执行相应的构建命令。

构建规则的基本格式如下:目标文件: 依赖文件构建命令其中,目标文件是要生成的文件,依赖文件是目标文件依赖的文件,构建命令是生成目标文件的命令。

构建规则中的目标文件和依赖文件可以是文件名,也可以是变量。

通过使用变量,可以提高makefile的可维护性和灵活性。

构建命令可以是任意的Shell命令,包括编译、链接、拷贝等操作。

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。

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

makefile all用法

makefile all用法

makefile all用法Makefile是一种类似于脚本的文件,可以用来自动化构建、编译和整合代码。

Makefile中常常会用到all指令,可以一次性执行多个任务。

本篇文章将详细说明Makefile中all指令的用法。

一、all指令的用途在Makefile中使用all指令的语法非常简单,只需要在文件中添加如下代码即可:all:<command1><command2><command3>...<command_n>其中,<command>表示需要执行的命令,可以是编译、构建、安装等一系列操作。

在语法中,all指令后面紧跟着“:”,表示all指令执行的是“伪目标”,而不是一个真正的文件。

也就是说,all指令并不会生成任何东西,它只是用来方便执行多个任务的一个指令。

1. all指令必须放在Makefile文件的开头。

这是因为,Makefile文件中的第一个目标就是Makefile默认的目标,也就是all指令。

2. all指令的语句必须以制表符(Tab)开头,否则会出现错误。

这是因为Makefile中使用了缩进,而不是空格,来标识命令与目标之间的关系。

因此,必须使用制表符来开头。

3. 如果在执行all指令的时候,其中的某个命令失败了,则后续的命令将不再执行。

这是因为Makefile中使用的是顺序执行的方式,即一个任务执行完成后才会进行下一个任务的执行。

下面是一个简单的Makefile文件,其中包含了几个常用的构建命令:说明:4. 使用make命令时,可以通过传递参数来指定执行的目标。

比如make clean,就只会执行clean目标下的所有命令。

总结:Makefile中使用all指令能够一次性执行多个命令,方便快捷。

在Makefile文件中添加all指令时,需要注意语法和文件位置等问题,避免出现错误。

在实际开发过程中,建议在Makefile文件中添加clean等指令,用于清理生成的目标文件和可执行文件。

windows下makefile命令详解

windows下makefile命令详解

windows下makefile命令详解1. 如果已经有vc6的dsp⼯程,可直接导出nmake脚本⽂件(.mak)“Project - Export Makefile...”nmake -f nMakeTest.mak CFG="nMakeTest - Win32 Debug"nmake -f nMakeTest.mak CFG="nMakeTest - Win32 Debug" allnmake -f nMakeTest.mak CFG="nMakeTest - Win32 Release" clean注:如果未指定/F选项,则使⽤当前⽬录下的名为makefile的⽂件【nmake /?】获取更多帮助! vc6:【D:\program files\Microsoft Visual Studio\VC98\Bin】vs2008:【D:\program files\Microsoft Visual Studio 9.0\VC\bin】为了能正确地使⽤命令⾏⼯具及vc6或vs2008下的函数库,需要对⼀些环境变量进⾏设置,最快捷地⽅式是通过如下⽅式打开命令⾏窗⼝(以vs2008为例):2. vs的c++⼯程没有提供导出nmake脚本⽂件的功能,我们只有借助⼯具或⼿动编写nmake脚本⽂件了++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++3. rc.exe 【将.rc资源⽂本转变成.res⼆进制⽂件】/l 0x804 // 默认语⾔ID(⼗六进制数表⽰) 0x804:简体中⽂ 0x409:美国/fo"nMakeTest.res" // 指定rc⽂件输出的res名称例:rc.exe /l 0x804 /fo"nMakeTest.res" /d "_DEBUG" /d "_AFXDLL" “nMakeTest.rc”4. cl.exe 常见选项【将.c,.cpp,.cxx编译成obj⽂件】/nologo // 不打印版权申明信息/I "../include" // 添加头⽂件查找路径(如果路径中带有空格,⼀定要⽤引号括起来)/DWIN32 // 预编译宏定义(win32程序)/D_CONSOLE // 预编译宏定义(控制台程序)/D "_DEBUG" // 预编译宏定义(Debug版本)/D_CRT_SECURE_NO_DEPRECATE // 预编译宏定义(关闭C4996警告。

makefile中make指令传入的参数

makefile中make指令传入的参数

makefile中make指令传入的参数Makefile中make指令传入的参数是指在执行make命令时,可以通过命令行传入的参数。

这些参数可以用于控制程序的编译、运行等行为,使得程序更加灵活和可配置。

在Makefile中,我们可以通过在命令行中输入make和参数来执行相应的操作。

参数可以是任意的字符串,可以用于指定编译选项、目标文件、源文件等等。

下面我将结合一些实际的例子,来详细讲解一下如何使用make指令传入的参数。

我们需要在Makefile中定义一些变量,用于存储传入的参数。

可以通过在命令行中使用“变量名=参数值”的方式来传入参数。

例如,我们可以定义一个变量CC,用于存储编译器的路径:```CC = gcc```在命令行中执行make命令时,可以通过“make CC=/usr/local/bin/gcc”来传入参数,将编译器的路径设置为“/usr/local/bin/gcc”。

接下来,我们可以在Makefile中使用这些参数。

例如,我们可以使用$(CC)来表示编译器的路径:```$(CC) -o target source.c```在执行make命令时,make会将$(CC)替换为实际的参数值,然后执行相应的命令。

这样,我们就可以通过命令行传入不同的编译器路径,来编译源文件。

除了编译器的路径,还可以通过命令行传入其他的参数。

例如,我们可以定义一个变量CFLAGS,用于存储编译选项:```CFLAGS = -Wall -O2```在命令行中执行make命令时,可以通过“make CFLAGS=-g”来传入参数,将编译选项设置为“-g”。

然后,我们可以在Makefile中使用这些参数。

例如,我们可以在编译命令中加入$(CFLAGS):```$(CC) $(CFLAGS) -o target source.c```在执行make命令时,make会将$(CFLAGS)替换为实际的参数值,然后执行相应的命令。

makefile中ifdef的用法

makefile中ifdef的用法

makefile中ifdef的用法题目: makefile中的ifndef的用法一、什么是makefile?Makefile是一种用来管理和构建项目的文件,它由一系列的规则组成,指定了如何编译和链接源代码以生成最终的可执行文件或库文件。

Makefile通常用于源代码非常复杂或需要跨平台构建的项目。

二、makefile的条件编译在编写makefile时,我们经常需要根据不同的条件执行特定的编译选项或构建命令。

条件编译是通过使用预处理指令来实现的。

makefile支持两种常用的条件编译指令:ifdef和ifndef。

三、ifndef指令的用法ifndef是"if not defined"的缩写,用于检查某个变量是否已定义。

如果该变量未定义,就执行ifdef指令中的一组命令。

在makefile中,我们可以使用ifndef指令来检查环境变量、宏定义或其他makefile中定义的变量是否已定义。

如果未定义,我们可以执行一组命令来设置默认值或终止构建。

以下是ifndef指令的基本语法:ifndef variable_namecommand1command2...endif四、ifndef指令的示例下面以一个简单的示例来说明ifndef指令的用法。

假设我们正在构建一个C语言项目,并且希望根据操作系统的类型设置不同的编译选项。

在这种情况下,我们可以使用ifndef指令来检查操作系统的环境变量,并根据其值设置不同的编译选项。

以下是一个makefile的示例:ifndef OS(error The OS variable is not defined!)endififeq ((OS), Windows)CC = gccCFLAGS = Wall DWINDOWSelse ifeq ((OS), Linux)CC = gccCFLAGS = Wall DLINUXelse ifeq ((OS), Mac)CC = clangCFLAGS = Wall DMACelse(error Unsupported operating system: (OS))endifall:(CC) (CFLAGS) main.c o my_program在这个示例中,我们首先使用ifndef指令检查OS变量是否已定义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
makefile 简介
Makefile
• 方便中大型程序项目的管理(不一定是基于C 语言的项目) • 在Linux下通过make命令调用makefile脚本,根 据其定义执行shell命令行 • 常用规则
– 如果这个工程没有编译过,那么我们的所有c文件 都要编译并被链接。 – 如果这个工程的某几个c文件被修改,那么我们只 编译被修改的c文件,并链接目标程序。 – 如果这个工程的头文件被改变了,那么我们需要编 译引用了这几个头文件的c文件,并链接目标程序。
make工作原理
• 如果edit文件不存在,或是edit所依赖的后 面的 .o 文件的文件修改时间要比edit这个文 件新,那么,他就会执行后面所定义的命 令来生成edit这个文件。 • 如果edit依赖的.o文件不存在,则找到后面 对应的定义规则来生成该.o文件。最后再 用.o文件生成edit执行文件
include foo.make *.mk $(bar)= nclude foo.make a.mk b.mk c.mk e.mk f.mk
变量的使用
edit : main.o kbd.o command.o cc -o edit main.o kbd.o command.o … clean : rm edit main.o kbd.o command.o
objects = main.o kbd.o command.o edit : $(objects) cc -o edit $(objects) … clean: rm edit $(objects)
make工作原理
1. make会在当前目录下找名字叫“Makefile” 或“makefile”的文件。 2. 如果找到,它会找文件中的第一个目标文 件(target),在上面的例子中,他会找到 “edit”这个文件,并把这个文件作为最终 的目标文件。 3. 如果edit文件不存在,或是edit所依赖的后 面的 .o 文件的文件修改时间要比edit这个 文件新,那么,他就会执行后面所定义的 命令来生成edit这个文件。
main.o : defs.h kbd.o : defs.h command.h command.o : defs.h command.h .PHONY : clean clean : rm edit $(objects)
文件引用
• include <filename>; • 假如你有这样几个Makefile:a.mk、b.mk、 c.mk,还有一个文件叫foo.make,以及一个 变量$(bar),其包含了 e.mk和f.mk,
edit : main.o kbd.o command.o cc -o edit main.o kbd.o command.o main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c clean : rm edit main.o kbd.o command.o
Makefilees ... #注释
command ... target:可以为可执行文件,object文件,或标签 (label) prerequisites: 生成该target需要的文件/目标 生成该target需要执行的shell命令
Makefile example
Make自动推导
• 只要make看到一个[whatever.o]文件,它就 会自动的把相应的[whatever.c]文件加在依 赖关系中。并且也会把执行命令
cc –c whatever.c推导出来。
Make自动推导
main.o : main.c defs.h cc -c main.c kbd.o : kbd.c defs.h command.h cc -c kbd.c command.o : command.c defs.h command.h cc -c command.c
相关文档
最新文档