首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Makefile入门

# 一、Makefile简介 # 1、Makefile是什么 Makefile是一种用于自动化构建程序工具,提供了一系列规则来指定源代码文件之间依赖关系,以及如何生成目标文件。...通过将整个项目分解为多个模块,并定义每个模块之间依赖关系,当某个模块发生变化时,只需要重新编译该模块及其依赖其他模块即可。这有助于减少手动操作和错误,并提高代码质量。...Makefile是一个文件,其中定义了一系列规则来指定哪些文件需要先编译、哪些文件需要后编译、哪些文件需要重新编译等。...如果找到,Make会按照Makefile文件中规则和指令,自动执行相应命令来编译和链接源代码文件,生成可执行文件或库。...目标定义了生成目标体,并指明生成目标体需要哪些依赖文件。 依赖(Dependency):依赖是指生成目标体所需文件或另一个目标。它可以是一个或多个文件,也可以没有

9910
您找到你想要的搜索结果了吗?
是的
没有找到

CMake,大型项目采用构建工具

所以建议学习这两个工具之前,先学习一下Makefile内容。不过在此声明,不要因为CMake出现,就不学Makefile和autotools。他们三者没有最好,而是应该看应用场合,然后再去选择。...跨平台,并可生成native编译配置文件,在Linux平台,生成makefile。在苹果平台,生成xcode。在Windows平台,生成MSVC工程文件。 能够管理大型项目。...编译测试:首相执行命令cmake .命令,该命令会根据CMakeLists.txt规则构建出Makefile,然后执行make命令,生成可执行程序,然后运行....说明 这个指令用于向终端输出用户定义信息,包含了三种类型: SEND_ERROR:产生错误生成过程被跳过 STATUS:输出前缀为-信息。...过程:创建目录build,然后在build目录下执行cmake,将构建中间文件生成build下,这样源文件就很干净。

1K20

程序员C语言快速上手——工程篇(十三)

C语言工程构建 shell脚本(bat脚本) Makefile 脚本 基本语法规则 补充说明 CMake工具 安装 简单示例 基础规则 外部构建 定义变量 内置变量 命令 指定构建环境 生成 Makefile...现在将命令行脚本改写为Makefile脚本,在源码目录下创建一个名为Makefile文件(亦可以写作makefile),注意,没有拓展名,编辑如下内容: # 编译一个main.exe 程序 main.exe...这里,如果我想生成MinGW开发环境Makefile,则只需要加一个-G参数,来指定一个明确编译环境,从而生成对应构建脚本。...),继续处理 SEND_ERROR CMake错误,继续处理,但会跳过生成 FATAL_ERROR CMake错误,停止处理和生成 内置变量 在cmake中已经内置了一些变量,我们可以直接使用,也可使用...LIBRARY_OUTPUT_PATH 设置该变量可修改库文件生成路径 # build/bin/ SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin

3K30

可移植 Makefile 教程

构建(build最后产物(可执行程序,文档等等)位于树根。Makefile 指定了依赖树内容,并且提供了 Shell 命令来从目标的 先决条件(prerequisite) 生成目标。 ?...规则需要指定 Shell 命令,这些 Shell 命令会被用于从先决条件中生成目标。 如果你打算创建示例中源文件,并调用 make, 你会发现实际上已经知道了该如何构建目标文件。...DESTDIR 是一个用于 staged build(分段式构建) 宏,为了打包需要,它会安装到一个伪根目录。与 PREFIX 不同,实际上不会从这个目录下运行。...如果推断规则不存在,那么你就需要对每个规则重复同样命令。对于大型项目,这太繁琐了,所以你可能想要有一些“配置”脚本,即使这些脚本是手写,来为你生成这些重复命令。...举个例子,下面是在源文件之外构建,一个调用 gcc 依赖生成例子,而不是虚构 input.c : $ gcc $CFLAGS -MM -MT '$(BUILD)/input.o' input.c

1.3K10

golang搭配 makefile 真香!

书归正传 golang内置了很多 go commands 可以帮助我们完成go每个阶段开发工作,但是很多时候我们需要分享我们代码给其他人,初次看到我们代码工程的人可能并不知道怎么让跑起来。...装配上Makefile,我们仅仅敲4个字符 make即可,我们开发过程中,不同阶段需要干不同事儿, 清理编译中间目标文件 跑测试case 检查测试覆盖率 执行代码检查 等等 Makefilegoal...help: @echo "make 格式化go代码 并编译生成二进制文件" @echo "make build 编译go代码生成二进制文件" @echo "make clean 清理中间目标文件"...来管理我们程序构建,减少了大量输入、拼写错误,简化构建项目的难度。...真实线上环境配合CI/CD更佳,如果你还没有尝试使用Makefile,那真的可以试试。

34010

Python安装报错:”ModuleNotFoundError:No module named _ctypes“ 解决方案

如果没有用这个选项,安装过程结束后,该软件所需软件被复制到不同系统目录下,比较混乱。 例如我们执行如下命令: cd Python-3.7.1 ....3、make编译make install安装 ※如果有需要,会进行 make depend(一种makefile规则,通过扫描一个目录下所有C\C++ 代码,从而判断出文件之间依赖关系,如a.cc...否则所有的文件都需要重新编译) 从Makefile中读取指令,根据makefile制定规则,将c\c++文件编译成*.o文件,然后进一步生成可执行文件。...里有提交地址),或者你系统少了一些依赖库等,这些需要自己仔细研究错误代码。.../configure  # 检查编译环境/相关库文件/配置参数,生成makefile make     # 对源代码进行编译,生成可执行文件 make install # 将生成可执行文件安装到当前计算机中特点

2.8K40

Makefile教程

语法规则如下: target:prerequisites command 其中,target为需要生成目标,prerequisites为依赖项,command为make需要执行命令(任意Shell...3.Makefile内容 Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释。 1.显式规则。显式规则说明了,如何生成一个或多个目标文件。...这是由Makefile书写者明显指出要生成文件,文件依赖文件,生成命令。 2.隐晦规则。...(3)Makefile规则通配符%,用于规则描述,一般用于目标文件生成。...原来这种是老式“双后缀规则”,编译器会自动将Makefile所在目录.cpp识别为源文件后缀,而.o识别为输出文件后缀。特别需要注意是,后缀规则不允许任何依赖文件,但也不能没有命令。

3.9K53

python中modulenotfounderror_esxi安装报错

如果没有用这个选项,安装过程结束后,该软件所需软件被复制到不同系统目录下,比较混乱。 例如我们执行如下命令: cd Python-3.7.1 ....3、make编译make install安装 ※如果有需要,会进行 make depend(一种makefile规则,通过扫描一个目录下所有C\C++ 代码,从而判断出文件之间依赖关系,如a.cc...否则所有的文件都需要重新编译) 从Makefile中读取指令,根据makefile制定规则,将c\c++文件编译成*.o文件,然后进一步生成可执行文件。...里有提交地址),或者你系统少了一些依赖库等,这些需要自己仔细研究错误代码。.../configure  # 检查编译环境/相关库文件/配置参数,生成makefile make     # 对源代码进行编译,生成可执行文件 make install # 将生成可执行文件安装到当前计算机中特点

53330

手把手教你写一个 Makefile 文件

一、了解什么是 Makefile 一个大型工程中源文件不计其数,各个功能或者模块分别放在不同目录下,手动敲命令去编译就带来很大麻烦,那么Makefile可以定义一系列编译规则,哪些文件需要先编译...你需要指定函数Object File。 三、编写一个简单 Makefile 1. Makefile 基本语法规则: 目标 ... : 依赖 ......根据上面的语法规则及编译链接过程编写一个Makefile文件 main:main.o openFile.o readFile.o writeFile.o # main生成需要.o文件 gcc...Makefile是通过对比时间戳,当我们生成中间文件或可执行文件之后,他们创建时间肯定要比 .c文件最后修改时间晚,如果某个 .c文件有新修改过,时间戳肯定会比原来生成中间文件或可执行文件时间戳晚...) # 删除可执行文件main 在Makefile中,最终要生成可执行文件main我们把叫做终极目标,其它所有的 .o 文件本身也是一个目标,也需要编译生成,工程里面许多 .c 就会生成许多

1.5K10

Makefile总结

Makefile是一个规定了怎么去编译和链接程序脚本文件,在执行make命令时会执行该文件,window环境下IDE,如visual studio已经集成了该功能,不需要关心程序编译规则,在linux.../build/obj/, $(OBJ)) 可对上边Makefile再进行修改: CC=g++ BIN=helloworld SRC=$(wildcard *.cpp) OBJ=$(patsubst %...并没有执行删除操作。 这种情况可以使用伪目标来解决,可避免在makefile中定义执行命令目标和当前目录下实际文件名冲突。 一旦定义为伪目标,make执行规则不会去查找隐含规则,同样也提高了效率。...clean: $(RM) $(OBJ) $(BIN) 嵌套执行 大型项目中所有的源代码不可能放到一个目录下,一般模块化代码是分开,有生成目录,有生成最终可执行文件目录,有进行测试目录等...,有时我们需要传递参数,两种方法: 方法一: 在上层Makefile中使用”export”关键字对要传递变量进行声明。

93310

Golang深入浅出之-Go语言项目构建工具:Makefile与go build

一、go build:简单高效命令行构建1.1 基本用法go build命令可以直接编译Go源代码文件,生成可执行文件。默认情况下,生成可执行文件名为源文件去掉.go后缀结果。...GOOS=linux GOARCH=amd64 go build -o myapp-linux二、Makefile:定制化构建流程2.1 Makefile简介Makefile是一种基于规则自动化构建工具...特别适合处理多步骤构建流程和跨平台编译。...解决:保持Makefile简洁,使用注释说明每条规则目的。问题:跨平台编译配置不当。解决:在Makefile中定义变量,根据目标平台调整编译命令。BINARY=myappGOOS ?...Makefile在大型项目、复杂构建流程或需要跨平台编译时更为灵活和强大。四、总结无论是使用go build还是Makefile,关键在于选择最适合项目需求构建方式。

36110

make menuconfig执行流程分析

如果一个规则没有命令或者依赖,并且目标不是一个存在文件名。在执行此规则时,目标总会被认为是最新。就是说:这个规则一旦被执行,make就认为目标已经被更新过。...FORCE被定义为一个伪目标,所以作为依赖时总是被认为是最新(比目标新),故有FORCE作为依赖目标每次make时必然会重新生成,在这里FORCE伪目标的规则命令为空,故FORCE在Kbuild体系中...也就是说,__build目标的依赖dochecklxdialog是用来检查生成配置对话框所需ncurses库是不是已经安装在本机了,如果没有安装,make过程会报错退出。...如果一个规则没有命令或者依赖,并且目标不是一个存在文件名。在执行此规则时,目标总会被认为是最新。就是说:这个规则一旦被执行,make就认为目标已经被更新过。...FORCE被定义为一个伪目标,所以作为依赖时总是被认为是最新(比目标新),故有FORCE作为依赖目标每次make时必然会重新生成,在这里FORCE伪目标的规则命令为空,故FORCE在Kbuild体系中

3.4K10

CC++项目构建指南:如何使用Makefile提高开发效率

每个规则包括一个目标(target)、一个或多个依赖(dependencies)和一组命令(commands)。目标是我们想要生成文件,依赖是生成目标所需要文件,命令是生成目标的具体步骤。...一个简单Makefile规则语法如下: target: dependencies commands 其中,target是生成目标文件名,dependencies是生成目标所需文件名列表,...然后,定义了一个BIN变量表示最终生成可执行文件名。最后,我们定义了两个规则生成目标文件和可执行文件。...第一个规则使用模式匹配来生成目标文件,表示将源代码目录下.c文件和.cpp文件编译成.o文件并保存到目标文件目录中。 第二个规则用来生成可执行文件。...依赖于所有的目标文件,并使用C++编译器链接这些目标文件生成最终可执行文件。 --- 总结 使用Makefile可以自动化构建C/C++项目,让编译、链接和生成可执行文件变得更加方便和高效。

36040

Makefile基本用法

名为GUNmakefile和Makefile文件同时存在,则使用前者。 调用方法过程中,若前者不存在,则如下脚本给出了如何寻找后者是否存在所需要调用方法,然后执行。...前两行等价,第三行-include使make忽略不存在或无法重新生成没有错误消息makefile ? ? ?...管道命令 对要调用规则施加特定顺序,而不必强制更新目标,使用管道命令。 当执行此条规则,则首先需要执行先决条件规则。然而当先决条件存在,不论是否被更改,都属于满足条件。...随后按原始顺序执行规则。 ? 通配符 *.o 匹配所有的.o文件, ? $?匹配修改过文件 ? 赋值过程中没有被理解为通配符,而是认为就是*.o本身,需要使用wildcard和$进行声明。 ? ?...每个target.d文件生成依赖于对应target.c和*.h文件。当.d文件发生变化,则执行对应make规则。 ?

2.5K40

使用sed和awk查找和替换字符串处理Makefile文件(三)

在前文中演示了使用awk和sed命令正则查找和替换Makefile文件中make clean操作规则:把-(RM) (ULT_BIN)和-(RM) (ULT_BIN)这两句写成一句-(RM) (ULT_BIN...) 1 具体功能需求 要实现效果如果上图所示,左边表示之前Makefile文件,右边是通过本次Shell脚本处理后Makefile文件,红色部分就是需要点。...具体如下: 需求1: 之前这个Makefile脚本在生成多个可执行文件时会调用gen_excbin包,然后执行*.o生成规则,但是由于前面加了$(CURDIR)/变量,而%.cpp和.c前面没有加,...所以不会调用gen_depend包生成.d依赖文件了,而是按照默认隐含gcc或者g++编译规则生成.o文件。...需求2: 每调用gen_excbin或者gen_libs包生成可执行文件或者库文件后(即 @和 @ 需求3: 替换掉原来(bin).o为(CURDIR)/ 2 shell程序 下面的这份shell脚本比较简单

16910

Makefile学习1

makefile、GNUmakefile,make会在当前目录下自动寻找找三个文件名 如果同时存在执行makefile;如果没有找到的话,make就无法继续编译程序,产生一个错误并退出;如果名称自定的话...Makefile内容 简单概括一下Makefile内容,主要包含有五个部分,分别是: 1) 显式规则 显式规则说明了,如何生成一个或多目标文件。...,不需要什么依赖,仅仅是执行删除操作,所以这个规则中并没有目标依赖。...自动生成头文件依赖关系 更高效解决方法是:使用gcc -M 命令自动生成头文件依赖关系 通过gcc -M命令,我们就可以自动生成一个hello.o目标文件依赖关系,就不需要我们手动将头文件添加到规则中了...当一个追加变量在定义时使用了override,后续对值进行追加时,也需要使用带有override指示符追加方式。否则对此变量值追加不会有效。

32710

【Linux】《how linux work》第十五章 开发工具

from aux.c and main.c: 下面是一个非常简单 Makefile通过 aux.c 和 main.c 生成一个名为 myprog 程序: # object files OBJS...请注意,myprog可以是实际文件,也可以是另一个规则目标。 在这种情况下,既是all规则,也是OBJS目标。...这样错误意味着 Makefile 有问题。制表符是分隔符,如果没有分隔符或有其他干扰,你会看到这个错误。...这是一个看起来不太常见目标,因为经常会改变Makefile本身。 这种做法已经不再常见,但如果你遇到一些告诉你使用这个规则指令,请确保这样做。...如果tail实际上在你系统上/bin而不是/usr/bin中,那么运行myscript将产生以下错误: bash: .

7410

cmake学习总结(一)

今天给大家分享是工程管理工具cmake,没有先介绍makefile工程管理工具(坦白来说,这两者都差不多,cmake最终还是会生成Makefile,只是说cmake语法稍微比较简单一些,没有Makefile...,一般都是直接使用厂家Makefile或者Cmake;但作为学习,还是要认真学习里面的原理,比如出现了错误,你要能够定位到错误并把解决掉,因为可能错误就出现在配置好Makefile或者Cmake里面...,所以你要看懂里面代码意思(也就是说,你知道这个工具是这样用,但是也要明白原理机制,做到之知其然,知其所以个然来!)..."(.表示当前目录,而..表示上一级目录),生成makefile等相关文件;然后再执行一下make命令进行编译工程,就能生成可执行文件main了,同时也会生成makefile文件,最后就可以执行可执行main...,在makefile里面也是这样来理解目标文件生成!)

35010
领券