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命令这些都是典型的使⽤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命令用法
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是一个非常重要的工具,用来自动构建项目和生成软件。
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环境下使⽤ 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的用法
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的一些常用命令,以帮助您更好地使用这个强大的工具。
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的命令行参数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内置的规则。
linux中make的用法
linux中make的用法
make是一个常用的Linux工具,主要用于自动化编译和链接程序。
在使用make之前,需要先编写Makefile文件,Makefile文件是一个文本文件,用于定义程序的编译规则和依赖关系。
Makefile 文件通常包含了以下几个部分:
1. 定义变量:可以定义一些变量,用于存储文件路径、编译器选项等信息。
2. 定义目标:每个目标对应一个编译规则,需要指定目标文件、依赖文件和编译命令。
3. 定义伪目标:伪目标不对应实际文件,用于执行一些特殊的操作,比如清除中间文件、生成文档等。
4. 定义变量操作:可以使用一些内置的函数对变量进行操作,比如替换字符串、添加后缀等。
使用make命令时,可以指定需要编译的目标,如果不指定则默认编译第一个目标。
make会自动分析依赖关系,只编译需要重新编译的文件,从而提高编译效率。
make支持一些常用的参数,比如-n表示只显示需要执行的命令而不实际执行,-j表示并行编译,-k表示继续执行其他目标即使某个目标编译失败。
总的来说,make是一个非常强大的工具,可以自动化编译和链接程序,大大简化了编译过程。
对于Linux开发者而言,掌握make 的用法是非常重要的。
Linuxmake命令详解
a —— 也就是all,输出所有的调试信息。(会非常的多) b —— 也就是basic,只输出简单的调试信息。即输出不需要重编译的目标。 v —— 也就是verbose,在b选项的级别之上。输出的信息包括哪个makefile被解析,不需要被重编译的依赖文件(或是依赖目标)等。 i —— 也就是implicit,输出所以的隐含规则。 j —— 也就是jobs,输出执行规则中命令的详细信息,如命令的PID、返回码等。 m —— 也就是makefile,输出make读取makefile,更新makefile,执行makefile的信息。
“-i” “--ignore-errors” 在执行时忽略所有的错误。
“-I <dir>” “--include-dir=<dir>” 指定一个被包含makefile的搜索目标。可以使用多个“-I”参数来指定多个目录。
“-j [<jobsnum>]” “--jobs[=<jobsnum>]” 指同时运行命令的个数。如果-j后没有这个jobsnum参数,make运行命令时能运行多少就运行多少。如果有一个以上的“-j”参数,那么仅最后 一个“-j”才是有效的。(注意这个参数在MS-DOS中是无用的)
“--no-print-directory” 禁止“-w”选项。
“-W <file>” “--what-if=<file>” “--new-file=<file>” “--assume-file=<file>” 假定目标<file>需要更新,如果和“-n”选项使用,那么这个参数会输出该目标更新时的运行动作。如果没有“-n”那么就像运行UNIX的“touch”命 令一样,使得<file>的修改时间为当前时间。
深入学习Make命令和Makefile(下)
深入学习Make命令和Makefile(下)makefilemake是Linux下的一款程序自动维护工具,配合makefile的使用,就能够根据程序中模块的修改情况,自动判断应该对那些模块重新编译,从而保证软件是由最新的模块构成。
本文分为上下两部分,我们在上一篇文章中分别介绍了make和makefile的一些基本用法,在本文中,我们会对make和makefile的功能做进一步的介绍。
一、构建多个目标有时候,我们想要在一个makefile中生成多个单独的目标文件,或者将多个命令放在一起,比如,在下面的示例mymakefile3中我们将添加一个clean选项来清除不需要的目标文件,然后用install选项将生成的应用程序移动到另一个目录中去。
这个makefile跟前面的mymakefile较为相似,不同之处笔者用黑体加以标识:1.all: main2.# 使用的编译器 = gcc4.# 安装位置5.INSTDIR =/usr/local/bin6.# include文件所在位置7.INCLUDE =.8.# 开发过程中所用的选项9.CFLAGS =-g -Wall–ansi10.# 发行时用的选项11.# CFLAGS = -O -Wall –ansi12.main: main.o f1.o f2.o13.$(CC)-o main main.o f1.o f2.o14.main.o: main.c def1.h15.$(CC)-I$(INCLUDE) $(CFLAGS)-c main.c16.f1.o: f1.c def1.h def2.h17.$(CC)-I$(INCLUDE) $(CFLAGS)-c f1.c18.f2.o: f2.c def2.h def3.h19.$(CC)-I$(INCLUDE) $(CFLAGS)-c f2.c20.clean:21.-rm main.o f1.o f2.o22.install: main23.@if[-d $(INSTDIR)]; \24.then \25.cp main $(INSTDIR);\26.chmod a+x $(INSTDIR)/main;\27.chmod og-w $(INSTDIR)/main;\28.echo ‚Installed in $(INSTDIR)‚;\29.else \30.echo ‚Sorry, $(INSTDIR) does not exist‛;\31.fi在这个makefile中需要注意的是,虽然这里有一个特殊的目标all,但是最终还是将main作为目标。
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 中的同名变量定义。
Linuxmake语法
Linuxmake语法make是⼀种控制编译或者重复编译软件的⼯具。
make可以⾃动关键软件的编译内容、⽅式和时机,从⽽使程序员把更多的精⼒集中在编写代码上。
make主要的机制是在命令⾏键⼊make命令,make会⾃动执⾏当前⽬录下的makefile⽂件makefile规则标号:依赖项(tab键)命令代码(tab键)命令代码--每个命令代码的第⼀个字符必须是tab键,⽽不是空格键,不然make会报错。
命令⾏直接键⼊make,make默认只会执⾏第⼀个标号的命令代码上图命令⾏详解start:hello.o--表⽰执⾏start标号下的命令⾏需要hello.o⽂件,如果当前⽬录下有hello.o⽂件,那么会直接执⾏start标号下的命令⾏;如果当前⽬录下没有hello.o⽂件,那么make会⾃动寻找⽣成hello.o⽂件的标号,找到hello.o标号,执⾏hello.o标号下的命令⾏,然后执⾏start标号下的命令⾏。
如果需要执⾏指定标号的命令⾏,必须使⽤make参数--make 需要执⾏的标号--例如:make clean在make语法中"@"表⽰不打印该命令语句,只打印命令执⾏结果--例如@echo "-OK--"只会打印-OK---为了简化编辑和维护makefile,可以在makefile中使⽤变量。
--varname=some_text把变量⽤括号扩起来,前⾯加上$符号就可以引⽤该变量的值--$(varname)按照惯例makefile的变量都是⼤写$(SRCS:.c=.o)意思是将SRCS变量中的.c替换成.o在makefile中⽤"#"来添加注释make中的依赖声明.SUFFIXES:.c (⼀个空格) .o--这表明.o⽂件依赖于.c⽂件,.c和.o⽂件之间存在着依赖关系--强调:使⽤.SUFFIXES来表⽰两个⽂件的依赖关系,必须两个⽂件的⽂件名⼀致,只是⽂件类型不同才可以适应.SUFFIXES在make语句start:$(OBJS)中,表明依赖项是.o⽂件,根据.SUFFIXES声明,.o⽂件依赖于.c⽂件,找到".c.o"标签,执⾏该标签下的命令--$@表⽰⽣成的⽬标⽂件--$<表⽰⽣成⽬标的源⽂件--$^表⽰依赖项--$@、$<都是针对于.SUFFIXES声明⽽⾔的,在.SUFFIXES声明定义的⽬标⽂件才⽤$@表⽰,源⽂件才⽤$<表⽰。
linux make命令的工作原理
linux make命令的工作原理make命令是一个用于自动化编译和构建程序的工具,它通过读取Makefile 文件中的规则来确定如何构建目标文件。
Makefile文件包含了目标文件和依赖关系的描述,以及构建目标文件的命令。
Make命令的工作原理如下:1.读取Makefile文件:make命令首先会读取当前目录下的Makefile文件,该文件包含了目标文件和依赖关系的描述,以及构建目标文件的命令。
2.解析规则:make命令会解析Makefile文件中的规则,包括目标文件、依赖关系和命令。
3.检查依赖关系:make命令会检查目标文件的依赖关系,并判断是否需要重新构建目标文件。
如果目标文件不存在或者依赖的文件被修改过,则需要重新构建目标文件。
4.构建目标文件:如果需要重新构建目标文件,make命令会执行Makefile文件中对应目标文件的构建命令。
构建命令可以是编译源代码、链接目标文件等操作。
5.更新目标文件:构建完成后,make命令会更新目标文件的时间戳,以反映最新的修改时间。
6.递归构建:如果目标文件的依赖关系中还包含其他目标文件,make命令会递归地执行构建过程,以确保所有的依赖关系都得到满足。
7.完成构建:当所有的目标文件都构建完成后,make命令会输出构建成功的消息,并退出。
Make命令的优势在于它只会构建需要更新的目标文件,而不会重新构建所有的文件。
这样可以提高编译和构建的效率,尤其是在大型项目中。
另外,Make命令还支持并行构建,可以同时构建多个目标文件,进一步提高构建的效率。
总结起来,Make命令的工作原理是通过读取Makefile文件中的规则来确定如何构建目标文件,检查目标文件的依赖关系并判断是否需要重新构建,执行构建命令来生成目标文件,递归构建所有的依赖关系,最后输出构建成功的消息。
Make命令的优势在于只构建需要更新的文件,提高构建效率。
linux基本指令make
linux基本指令make
make命令是一个常用的Linux命令,主要用于构建和编译软件项目。
它通常与一个名为Makefile的文件一起使用,Makefile中包含了关于如何编译和链接项目的规则。
当你运行make命令时,它会根据Makefile中的规则来决定哪些文件需要重新编译,然后执行相应的编译命令。
make命令的基本语法是:
make [选项] [目标]
其中,选项用于指定一些特定的行为,目标则是指定要构建的目标。
如果不指定目标,make命令会默认执行Makefile中的第一个目标。
make命令常用的选项包括:
-f <文件>,指定要使用的Makefile文件。
-n,显示执行make命令时将会执行的操作,但并不实际执行。
-B,强制重新构建所有目标。
在实际使用中,make命令可以帮助开发人员自动化构建过程,
提高开发效率。
通过合理编写Makefile文件,可以定义编译、链接、打包等操作,使得项目的构建过程变得简单高效。
除了构建软件项目,make命令还可以用于其他用途,比如管理
文件的复制、删除等操作。
总的来说,make命令是Linux系统中一
个非常实用的工具,可以帮助用户简化和自动化各种任务。
linux下cmake用法
linux下cmake用法CMake是一种开源跨平台的自动化构建工具,可以用于管理项目,在不同平台、不同编译器上生成编译选项和构建指令的Makefile文件。
本文将简要介绍CMake的基本用法。
一、CMake的安装和基本命令CMake的安装十分简单,可以直接在官网下载对应的安装包,安装完成后可以在终端中使用cmake命令。
常用的CMake命令有:1. cmake -DCMAKE_INSTALL_PREFIX=/path/to/install /path/to/source此命令将在指定的路径上安装源代码的构建结果,可以通过CMAKE_INSTALL_PREFIX选项来指定。
2. cmake -G “Unix Makefiles” /path/to/source此命令将根据指定的源代码生成Makefile文件,在其中添加编译链接指令,并且可以使用不同的文件格式(比如Ninja、Visual Studio)。
3. make此命令将根据Makefile文件进行编译链接,完成生成二进制程序或库的过程。
二、CMakeLists.txt文件的编写CMake的核心文件为CMakeLists.txt,这个文件为CMake提供了项目的基本信息。
常用的CMakeLists.txt文件的编写格式包括以下几个部分:1. 最低CMake版本号的指定:cmake_minimum_required(VERSION 3.0)3. 设置编译选项:set(CMAKE_CXX_STANDARD 14)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS OFF)5. 添加静态库到构建中:add_library(libname STATIC lib.cpp)6. 安装设置:install(TARGETS example DESTINATION bin)7. 添加外部依赖库:find_package(libraray REQUIRED)#包含头文件#include_directories(${LIBRARY_INCLUDE_DIRS})#链接库#target_link_libraries(test_libraray ${LIBRARY_LIBRARIES})8. 生成配置文件:configure_file(config.h.in config.h)9. 添加子目录的CMakeLists.txt:add_subdirectory(subdir_name)三、CMakeLists.txt文件的相关选项1. setset命令常用来设置变量,可以用来指定一些平台或者编译器相关的设置。
make命令参数用法
make命令参数用法
make命令是一个build工具,用于在Linux、Unix和类似的操
作系统上进行代码的编译和构建。
下面列出了一些常用的make命令参数用法:
1. `make`:执行默认目标,并构建项目。
2. `make [target]`:执行指定目标,并构建项目。
3. `make -f [makefile]`:指定使用的Makefile文件。
4. `make -C [directory]`:在指定目录下执行make命令。
5. `make -n`:显示make命令执行时的动作,但不实际执行。
6. `make -B`:强制重新构建所有的目标。
7. `make -j [n]`:使用多个进程并行执行编译任务,加快构建
速度。
其中,n指定了同时运行的任务数量。
8. `make clean`:清理项目,删除生成的文件。
9. `make install`:安装项目,将生成的文件复制到指定目录。
10. `make uninstall`:卸载项目,将安装的文件从目录中删除。
11. `make distclean`:彻底清理项目,删除所有生成的文件和
配置。
这些参数用法仅为常见的一部分,还有其他更复杂的用法和选项。
可以通过`man make`命令查看完整的make命令文档,以
了解更多参数和用法。
【Linux】源码安装make命令详解,避免踩坑
【Linux】源码安装make命令详解,避免踩坑正常的编译安装/卸载:源码的安装⼀般由3个步骤组成:配置(configure)、编译(make)、安装(make install)。
configure⽂件是⼀个可执⾏的脚本⽂件,它有很多选项,在待安装的源码⽬录下使⽤命令./configure –help可以输出详细的选项列表。
其中--prefix选项是配置安装⽬录,如果不配置该选项,安装后可执⾏⽂件默认放在/usr /local/bin,库⽂件默认放在/usr/local/lib,配置⽂件默认放在/usr/local/etc,其它的资源⽂件放在/usr /local/share,⽐较凌乱。
如果配置了--prefix,如:$ ./configure --prefix=/usr/local/test安装后的所有资源⽂件都会被放在/usr/local/test⽬录中,不会分散到其他⽬录。
使⽤--prefix选项的另⼀个好处是⽅便卸载软件或移植软件;当某个安装的软件不再需要时,只须简单的删除该安装⽬录,就可以把软件卸载得⼲⼲净净;⽽移植软件只需拷贝整个⽬录到另外⼀个机器即可(相同的操作系统下)。
当然要卸载程序,也可以在原来的make⽬录下⽤⼀次make uninstall,但前提是Makefile⽂件有uninstall命令(nodejs的源码包⾥有uninstall 命令,测试版本v0.10.35)。
关于卸载:如果没有配置--prefix选项,源码包也没有提供make uninstall,则可以通过以下⽅式可以完整卸载:找⼀个临时⽬录重新安装⼀遍,如:$ ./configure --prefix=/tmp/to_remove && make install然后遍历/tmp/to_remove的⽂件,删除对应安装位置的⽂件即可(因为/tmp/to_remove⾥的⽬录结构就是没有配置--prefix选项时的⽬录结构)。
linux cmake命令用法
linux cmake命令用法【原创实用版】目录1.CMake 简介2.CMake 基本命令3.CMake 命令用法示例4.总结正文1.CMake 简介CMake 是一个跨平台的构建系统,可以用于创建和构建 C、C++和Fortran 项目。
CMake 可以自动检测操作系统和编译器,并根据项目的需求自动生成相应的构建文件。
这使得 CMake 在多种操作系统和平台上都可以方便地使用。
2.CMake 基本命令CMake 的基本命令包括以下几个:- cmake:用于创建构建文件的命令。
- cmake-gui:用于创建构建文件的图形界面命令。
- make:用于根据构建文件进行构建的命令。
- make install:用于安装构建完成后的可执行文件的命令。
3.CMake 命令用法示例以一个简单的 C++项目为例,演示如何使用 CMake 命令创建构建文件并进行构建。
步骤一:使用 cmake 命令创建构建文件```bashmkdir buildcd buildcmake..```在这个示例中,我们首先创建了一个名为“build”的目录,并进入该目录。
然后,我们使用 cmake 命令创建构建文件,将项目的根目录作为参数传递给 cmake。
步骤二:使用 make 命令进行构建```bashmake```在创建好构建文件后,我们使用 make 命令进行构建。
根据项目的不同,这个过程可能会涉及到编译源代码、链接库文件等操作。
步骤三:使用 make install 命令安装可执行文件```bashsudo make install```构建完成后,我们使用 make install 命令安装可执行文件。
这个过程通常会将可执行文件安装到系统的 PATH 变量中,方便用户在任何地方调用。
4.总结CMake 是一个功能强大的构建系统,可以方便地用于创建和构建 C、C++和 Fortran 项目。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)的工具。