Linux编程make命令介绍

合集下载

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 没有重新编译。

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 ⾥有提交地址),或者你的系统少了⼀些依赖库等,这些需要⾃⼰仔细研究错误代码。

linux cmake命令用法

linux cmake命令用法

CMake是一个跨平台的自动化构建系统,它用于控制编译和构建过程,使得源代码能够在多种操作系统和编译器上进行编译。

在Linux系统中,CMake命令的用法与其他平台上的用法相似。

以下是CMake命令在Linux系统中的一些常见用法:
创建构建目录并进入该目录:
bash
mkdir build
cd build
运行CMake生成构建系统文件:
shell
cmake ..
这将根据上级目录中的CMakeLists.txt文件生成构建系统文件。

编译源代码:
go
make
这将使用默认的构建工具(通常是GNU Make)编译源代码。

你可以使用其他构建工具,如Ninja,通过指定-G选项来选择:
go
cmake -G Ninja ..
ninja
安装目标文件(可选):
如果在CMakeLists.txt文件中定义了安装目标,可以使用以下命令来安装:
go
make install
或者,如果使用Ninja构建工具,可以运行:
go
ninja install
清理构建文件:
要清理构建过程中生成的文件,可以运行:
go
make clean
或者,如果使用Ninja构建工具,可以运行:
go
ninja clean
这只是CMake命令在Linux系统中的一些基本用法。

实际上,CMake提供了丰富的功能和选项,可以根据项目需求进行灵活配置和扩展。

你可以通过运行cmake --help命令来获取更多关于CMake选项和用法的帮助信息。

linux make的命令行参数

linux make的命令行参数

linux make的命令行参数Linux make是一个非常重要的工具,用来自动构建项目和生成软件。

make命令行参数可以用来指定构建目标、编译器选项、目标平台等参数。

以下是常见的Linux make命令行参数:1. -f:指定目标文件名。

例如make -f makefile表示使用makefile文件构建项目。

2. -j:指定并行构建的进程数。

例如make -j4表示使用4个进程并行构建。

3. -C:指定目标目录。

例如make -C /usr/src/kernel表示在/usr/src/kernel目录下构建项目。

4. -k:表示忽略错误,继续构建。

例如make -k表示继续构建即使出现错误。

5. -n:表示模拟构建,不实际执行构建。

例如make -n表示打印出构建过程但不实际构建。

6. -B或--always-make:表示强制重新构建。

例如make -B表示强制重新构建所有目标文件。

7. -r或--no-builtin-rules:表示禁用内置规则。

例如make -r表示禁用内置规则,只使用自定义规则。

8. -s或--silent或--quiet:表示禁止输出构建详细信息。

例如make -s表示禁止输出构建详细信息。

9. -v或--version:表示显示make版本信息。

例如make -v表示显示make版本信息。

10. -h或--help:表示显示make命令的帮助信息。

例如make -h表示显示make命令的帮助信息。

以上命令是常见的make命令行参数,可以根据实际需求选择使用。

Linux之make的用法讲解

Linux之make的用法讲解

Linux之make的⽤法讲解在 Linux环境下使⽤ GNU 的 make⼯具能够⽐较容易的构建⼀个属于你⾃⼰的⼯程,整个⼯程的编译只需要⼀个命令就可以完成编译、连接以⾄于最后的执⾏。

不过这需要我们投⼊⼀些时间去完成⼀个或者多个称之为 Makefile ⽂件的编写。

此⽂件正是 make 正常⼯作的基础。

make 是⼀个命令⼯具,它解释 Makefile 中的指令(应该说是规则)。

在 Makefile⽂件中描述了整个⼯程所有⽂件的编译顺序、编译规则。

准备知识:编译,链接,静态库,共享库编译:把⾼级语⾔所书写的代码转换成机器可识别的指令,此时还不能够被执⾏,编译器通过检查⾼级语⾔的语法,函数和变量的声明是否正确!如果正确则产⽣中间⽬标⽂件(⽬标⽂件在Liunx中默认后缀为“.o”)链接:将多.o ⽂件,或者.o ⽂件和库⽂件链接成为可被操作系统执⾏的可执⾏程序静态库:⼜称为⽂档⽂件(Archive File)。

它是多个.o⽂件的集合。

Linux中静态库⽂件的后缀为“.a”共享库:也是多个.o ⽂件的集合,但是这些.o ⽂件时有编译器按照⼀种特殊的⽅式⽣成(共享库已经具备了可执⾏条件)在执⾏ make 之前,需要⼀个命名为 Makefile 的特殊⽂件(本⽂的后续将使⽤Makefile 作为这个特殊⽂件的⽂件名)来告诉 make 需要做什么(完成什么任务),该怎么做。

当使⽤make ⼯具进⾏编译时,⼯程中以下⼏种⽂件在执⾏make 时将会被编译(重新编译):1.所有的源⽂件没有被编译过,则对各个 C 源⽂件进⾏编译并进⾏链接,⽣成最后的可执⾏程序;2.每⼀个在上次执⾏ make 之后修改过的 C 源代码⽂件在本次执⾏make 时将会被重新编译;3.头⽂件在上⼀次执⾏make 之后被修改。

则所有包含此头⽂件的 C 源⽂件在本次执make 时将会被重新编译。

Makefile规则介绍⼀个简单的 Makefile 描述规则组成:TARGET... : PREREQUISITES...COMMAND......target:规则的⽬标。

linux中make的用法

linux中make的用法

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

它可以读取Makefile文件,根据文件中的指令来执行一系列操作。

make指令可以根据源代码的变化,只编译需要重新编译的文件,从而加快编译速度。

使用make指令需要掌握基本的语法和参数,例如: 1. make [目标文件]:编译指定目标文件,如果不指定则编译Makefile中的默认目标。

2. make clean:清除已编译的文件。

3. make all:编译当前目录下的所有文件。

4. make install:安装已编译的文件。

在使用make指令前,需要确保已安装相关开发工具和编译器。

此外,对于不同的编程语言和工具链,make指令的使用也存在差异。

因此,在使用make指令时需要结合具体情况进行学习和实践。

- 1 -。

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文件。

linuxmake的命令行参数

linuxmake的命令行参数

linuxmake的命令行参数Linux下的make命令是一个常用的构建工具,用于自动化编译和构建软件项目。

它可以根据源代码和构建规则自动检测文件的修改并重新编译,从而大大提高软件开发的效率。

make命令的命令行参数非常丰富,下面是一些常用的参数及其功能。

1. `-f` 或 `--file`:指定makefile文件的位置和名称。

2. `-j` 或 `--jobs`:指定并行执行的任务数。

例如,`make -j4`表示使用4个并行任务来编译。

3. `-k` 或 `--keep-going`:在一些任务失败后继续执行后续任务,而不会停止整个构建过程。

4. `-n` 或 `--just-print`:只打印make会执行的命令,而不实际执行。

5. `-s` 或 `--silent`:静默模式,不输出执行过程中的详细信息。

6. `-w` 或 `--print-directory`:打印执行规则的目录。

7. `-B` 或 `--always-make`:无条件地重新执行所有的目标。

8. `-C` 或 `--directory`:指定makefile所在的工作目录。

9. `-e` 或 `--environment-overrides`:允许环境变量覆盖makefile中的变量。

10. `-h` 或 `--help`:显示帮助信息。

11. `-i` 或 `--ignore-errors`:忽略命令执行中的错误。

12. `-k` 或 `--keep-going`:继续执行即使一些目标失败。

14. `-O` 或 `--output-sync`:输出时保持规则的完整性以保持同步。

15. `-P` 或 `--no-print-directory`:不打印执行规则的目录。

16. `-q` 或 `--question`:检查指定的目标是否需要重新编译,不进行实际编译。

17. `-r` 或 `--no-builtin-rules`:禁用make内置的规则。

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

Linux编程make命令介绍摘要:在开发一个系统时,一般是将一个系统分成几个模块,这样做提高了系统的可维护性,但由于各个模块间不可避免存在关联,所以当一个模块改动后,其他模块也许会有所更新,当然对小系统来说,手工编译连接是没问题,但是如果是一个大系统,存在很多个模块,那么手工编译的方法就不适用了。

为此,在Linux 系统中,专门提供了一个make命令来自动维护目标文件,与手工编译和连接相比,make命令的优点在于他只更新修改过的文件(在Linux中,一个文件被创建或更新后有一个最后修改时间,make命令就是通过这个最后修改时间来判断此文件是否被修改),而对没修改的文件则置之不理,并且make命令不会漏掉一个需要更新的文件。

文件和文件间或模块或模块间有可能存在倚赖关系,make命令也是依据这种依赖关系来进行维护的,所以我们有必要了解什么是依赖关系;打个最比喻:如果我们想玩游戏,必须有游戏光碟和电脑(这两者间存在依赖关系),而有游戏光碟和电脑的前提条件是必须经济条件允许,另外当你有了游戏光碟后还要根据你的心情来选择是玩哪种游戏;如下图:玩游戏//游戏光碟电脑/ // /心情经济情况make命令当然不会自己知道这些依赖关系,而需要程序员将这些依赖关系写入一个叫makefile的文件中。

Makefile文件中包含着一些目标,通常目标就是文件名,对每一个目标,提供了实现这个目标的一组命令以及和这个目标有依赖关系的其他目标或文件名,以下是一个简单的Makefile的简单例子:#一个简单的Makefileprog:prog1.o prog2.o //prog目标依赖prog1.o和prog2.ogcc prog1.o prog2.o -o prog //prog1.o和prog2.o生成progprog1.o:prog1.c lib.h //prog1.o 依赖 prog1.c lib.hgcc -c -I. -o prog1.o prog1.cprog2.o:prog2.cgcc -c prog2.c以上Mamefile中定义了三个目标:prog、prog1和prog2,分号后是依赖文件列表,中间用一个分号隔开;对于第一个目标文件prog来说,他有两个依赖文件:prog1.o和prog2.o,任何一个依赖文件更新,prog 也要随之更新,命令gcc prog1.o prog2.o -o prog是生成prog的命令。

make检查目标是否需要更新时采用递归的方法,递归从底层向上对过时目标进行更新,只有当一个目标所依赖的所有目标都为最新时,这个目标才会被更新。

以上面的Makefile为例,我们修改了prog2.c,执行make时,由于目标prog依赖prog1.o和prog2.o,所以要先检查 prog1.o和prog2.o是否过时,目标prog1.o依赖prog1.c和lib.h,由于我们并没修改这两个文件,所以他们都没有过期,接下来再检查目标prog2.o,他依赖prog2.c,由于我们修改了prog2.c,所以prog2.c比目标文件prog2.o要新,即prog2.o过期,而导致了依赖prog2.o的所有目标都过时;这样make会先更新prog2.o再更新prog。

如果某一行过长,已经到了文本编辑器的右边界,可用一个反斜杠()做换行符,反斜杠所连接的所有行都会被当成一行来处理;另外在Makefile中涉及的文件名允许使用通配符(?或*)。

有时候为了简化命令的书写,可以在Makefile中定义一些宏和使用缩写,下面是几个很使用的缩写:$@ 代表该目标的全名$* 代表已经删除了后缀的目标名$< 代表该目标的第一个相关目标名现在就可以使用缩写对以上Makefile做相应的修改:#使用缩写的Makefileprog:prog1.o prog2.ogcc prog1.o prog2.o -o $@prog1.o:prog1.c lib.hgcc -c -I. -o $@ $<prog2.o:prog2.cgcc -c $*.c在一个项目中,可能几个目标中使用同一个文件a.c,如果以后这个文件被修改,那么需要修改Makefile中所有的a.c,这样就比较麻烦,可以定义宏来解决这个问题,宏可以使Makefile更加清晰:#使用缩写和宏的MakefileMARCO = prog1.o prog2.oprog:$(MARCO)gcc prog1.o prog2.o -o $@prog1.o:prog1.c lib.hgcc -c -I. -o $@ $<prog2.o:prog2.cgcc -c $*.c对于很大的项目来说,自己手写Makefile非常麻烦,而标准的GNU软件(如Apacle)都是运行一个configure脚本文件来产生 Makefile;GNU软件automake和autoconf就是自动生成configure的工具。

开发人员只需要先定义好宏,automake处理后会产生供autoconf使用的Makefine.in,再用autoconf就可以产生configure。

要使用automake和 autoconf必须安装:GNU Automake,GNU Autoconf,GNU m4,perl 和GNU Libtool。

假设你有一个源文件test.c,用autoscan可以产生一个configure.scan文件,编辑这个文件dnl Process this file with autoconf to produce a configure script.AC_INIT(test.c)AC_INIT_AUTOMAKE(test,1.0)dnl Checks for programs.AC_PROG_CCdnl Checks for libraries.dnl Checks for header files.dnl Checks for typedefs, structures, and compiler characteristics.dnl Checks for library functions.AC_OUTPUT(Makefile)接着将configure.scan改名为cnfigure.in,再执行aclocal和autoconf,会产生aclocal.m4和 configure 两个文件:我们再编辑Makefile.am文件,Makefile.am文件中包含了我们自己定义的宏以及目标文件,automake会读如这个文件并根据我们自己定义的宏产生相应的Makefile.in文件:AUTOMAKE_OPTIONS=foreignrun_PROG=testtest_SOURCE=test.c接下来执行automake -a,到目前为止,configure文件已经成功生成。

例子:从helloworld入手下面的过程如果简单地说来就是:新建三个文件:helloworld.cconfigure.inMakefile.am然后执行:aclocal; autoconf; automake --add-missing; ./configure; make; ./helloworld就可以看到Makefile被产生出来,而且可以将helloworld.c编译通过。

很简单吧,几条命令就可以做出一个符合惯例的Makefile,感觉如何呀。

现在开始介绍详细的过程:1、建目录在你的工作目录下建一个helloworld目录,我们用它来存放helloworld程序及相关文件,如在/home/my/build下:$ mkdir helloword$ cd helloworld2、 helloworld.c然后用你自己最喜欢的编辑器写一个hellowrold.c文件,如命令:vi helloworld.c。

使用下面的代码作为helloworld.c的内容。

int main(int argc, char** argv){printf("Hello, Linux World! ");return 0;}完成后保存退出。

现在在helloworld目录下就应该有一个你自己写的helloworld.c了。

3、生成configure我们使用autoscan命令来帮助我们根据目录下的源代码生成一个configure.in的模板文件。

命令:$ autoscan$ lsconfigure.scan helloworld.c执行后在hellowrold目录下会生成一个文件:configure.scan,我们可以拿它作为configure.in的蓝本。

现在将configure.scan改名为configure.in,并且编辑它,按下面的内容修改,去掉无关的语句:============================configure.in内容开始=========================================# -*- Autoconf -*-# Process this file with autoconf to produce a configure script.AC_INIT(helloworld.c)AM_INIT_AUTOMAKE(helloworld, 1.0)# Checks for programs.AC_PROG_CC# Checks for libraries.# Checks for header files.# Checks for typedefs, structures, and compiler characteristics.# Checks for library functions.AC_OUTPUT(Makefile)============================configure.in内容结束=========================================然后执行命令aclocal和autoconf,分别会产生aclocal.m4及configure两个文件:$ aclocal$lsaclocal.m4 configure.in helloworld.c$ autoconf$ lsaclocal.m4 autom4te.cache configure configure.in helloworld.c大家可以看到configure.in内容是一些宏定义,这些宏经autoconf处理后会变成检查系统特性、环境变量、软件必须的参数的shell脚本。

autoconf 是用来生成自动配置软件源代码脚本(configure)的工具。

相关文档
最新文档