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

当源文件位于不同的目录中时,如何编写makefile?

当源文件位于不同的目录中时,可以通过编写适当的makefile来管理和构建项目。下面是一种常见的方法:

  1. 首先,需要定义变量来表示源文件和目标文件的路径。例如,假设源文件位于src目录中,目标文件位于build目录中,可以定义以下变量:
  2. 首先,需要定义变量来表示源文件和目标文件的路径。例如,假设源文件位于src目录中,目标文件位于build目录中,可以定义以下变量:
  3. 接下来,需要定义一个规则来指定如何生成目标文件。可以使用通配符来匹配源文件,然后使用相应的规则来生成目标文件。例如,假设源文件的扩展名为.c,可以使用以下规则:
  4. 接下来,需要定义一个规则来指定如何生成目标文件。可以使用通配符来匹配源文件,然后使用相应的规则来生成目标文件。例如,假设源文件的扩展名为.c,可以使用以下规则:
  5. 其中,$(CC)表示编译器,$(CFLAGS)表示编译选项,$<表示依赖文件(源文件),$@表示目标文件。
  6. 然后,需要定义一个目标来指定如何生成最终的可执行文件。可以列出所有的目标文件,并使用相应的规则来生成可执行文件。例如,假设最终的可执行文件名为app,可以使用以下规则:
  7. 然后,需要定义一个目标来指定如何生成最终的可执行文件。可以列出所有的目标文件,并使用相应的规则来生成可执行文件。例如,假设最终的可执行文件名为app,可以使用以下规则:
  8. 其中,$^表示所有的依赖文件(目标文件),$@表示目标文件(可执行文件)。
  9. 最后,可以定义一些辅助规则,如清理规则和默认规则。清理规则用于删除生成的目标文件和可执行文件,可以使用以下规则:
  10. 最后,可以定义一些辅助规则,如清理规则和默认规则。清理规则用于删除生成的目标文件和可执行文件,可以使用以下规则:
  11. 默认规则用于指定默认的目标,可以使用以下规则:
  12. 默认规则用于指定默认的目标,可以使用以下规则:
  13. 这样,在运行make命令时,会自动执行默认规则,生成最终的可执行文件。

以上是一个简单的makefile示例,可以根据实际情况进行修改和扩展。请注意,这只是一种常见的方法,实际的makefile可能会根据项目的需求和结构有所不同。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

编写一个爬虫思路,遇到反爬如何处理

开章明义,遇到反爬机制,想要做到把数据爬下来,无非四个方法: 加代理 降速度 破解接口 多注册几个账户 好多文章为了显示自己高大上,吹些什么高并发呀,分布式,机器学习破解验证码幺蛾子,都是扯淡。...我们知道计算机程序按瓶颈不同大概分为两类,CPU 密集型和 IO 密集型。CPU 密集型就是偏重计算任务,比如说编解码啥;IO 密集型就是偏重于网络任务,比如说下载或者 web 服务器。...**作为一个合格爬虫编写者,你肯定已经擅长伪造各种 HTTP headers, 破解 JS 加密参数,但是唯独一个 -- 来源 IP -- 你是无法伪造。...拿到抓取任务思路 言归正传,我们开始说拿到一个站点需要爬取如何处理。 数据量较小爬取 首先开始 easy 模式。如果你要抓网站结构比较简单,而你要数据也比较少。...那么你首先要考虑是不要编写爬虫. 在浏览器控制台里写个 js 表达式 console.log 一下说不定就把数据导出来了。

71620

Makefile教程

6.多源文件目录简单模板 通过上面简单示例可以大致了解Makefile基本编写方法与内容,实际上,Makefile可以通过make自动推导特性、内置变量、自动化变量和函数等编写地更加简洁优雅,并且可以模板化...自动推导功能和自动化变量,用一条语句实现同一个目录下多个源文件编译 #根据多个源文件目录添加多个,注意不同目录源文件不能重名 ${DIR_OBJ}/%.o:${DIR_SRC0}/%.cpp...& $(MAKE) 解释:生成target目标对象,会执行$(MAKE) -C $(SUBDIR)这条命令,进入目录OBJDIR,该目录下有一个Makefile,并执行。...(2)Makefile内嵌shell脚本Makefile每一行shell脚本需要一个shell进程来执行,不同行之间变量值不能传递。所以,Makefileshell不管多长也要写在一行。...尤其是在Makefile变量定义或者函数调用时,通配符%展开功能就失效了。此时需要借助wildcard函数。通配符*常用于wildcard函数,二者应用范围不同

3.9K53

CMake vs Make对比

“Make”是从程序源文件控制程序可执行文件和其他非源文件生成工具。 “Make”工具需要知道如何构建程序。它了解如何从名为“makefile文件构建程序。...这个makefile列出了每个非源文件以及如何从其他文件中计算它。编写程序时,应该为其编写一个makefile,以便可以使用“Make”来构建和安装程序。简单东西!...这就是我们有这个makefile原因。构建过程细节实际上记录在您提供makefile。根据哪些源文件已更改,“自动”自动显示需要更新文件。...对于程序每个非源文件makefile指定了用于计算它shell命令。...当然,第三方库(如OpenGL)以便携式方式被包含,CMake真的开始闪耀。 有什么不同? 如果您使用Makefile,即在命令行中键入“make”,则构建过程有一个步骤。

3.8K31

cmake 简介2021-10-03

build,与in-source build相对,即将编译输出文件与源文件放到不同目录; 三、 基本结构 1,依赖CMakeLists.txt文件,项目主目标一个,主目录可指定包含目录...build,与in-source build相对,即将编译输出文件与源文件放到不同目录; 三、 基本结构 1,依赖CMakeLists.txt文件,项目主目标一个,主目录可指定包含目录...图 1. camke 运行结果 处理多源文件目录方法 CMake 处理源代码分布在不同目录情况也十分简单。现假设我们源代码分布情况如下: 图 2....处理多源文件目录 cmake 执行结果 在执行 cmake 过程,首先解析目录 step2 CMakeLists.txt ,程序执行命令 ADD_SUBDIRECTORY( src...处理多源文件目录 cmake 执行结果 在执行 cmake 过程,首先解析目录 step2 CMakeLists.txt ,程序执行命令 ADD_SUBDIRECTORY( src

31620

探索Linux内核:Kconfig秘密

通过将源文件划分为不同模块/组件,每个组件都由自己Makefile管理。您开始构建,顶级Makefile按正确顺序调用每个组件makefile,构建组件,并将它们收集到最终执行程序。...KBuild指的是不同类型makefileMakefile位于源根顶部makefile。 .config是内核配置文件。...顶部makefile包含archmakefile,读取.config文件,进入子目录,调用制作,使定义例程帮助下实现每个组件makefile。...编译源文件命令行也很重要,因为不同命令行可能导致不同对象文件。 .C文件通过#include指令,您需要编写这样规则: main.o: defs.h recipe......在管理一个大型项目,您需要很多这样规则;所有这些规则都会乏味。幸运是,大多数现代C编译器可以通过查看#include源文件行。

1.7K11

Makefile学习1

linux下编写程序,因为早期没有成熟IDE,一般都是使用不同命令进行编译:将源文件分别使用编译器、汇编器、链接器编译成可执行文件,然后手动运行。...文件,例如项目中需要添加更多源文件,你只需要更改OBJS值就可以了。...比如hello.c,匹配模式为%.c,$*表示hello $(@D):表示目标文件目录部分 $(@F):表示目标文件文件名部分 $(*D):在模式匹配,表示目标模式%目录部分 $(*F):...递归执行 在实际工程项目中,各个源文件通常存放在各个不同目录,make在编译工程项目,会依次遍历各个不同目录,编译每个子目录源文件。...,解析各个子目录Makefile并运行,遍历完所有的子目录 make依次遍历到各个子目录下解析新Makefile,项目顶层目录Makefile定义一些变量,如何传递到子目录Makefile

33110

可移植 Makefile 教程

我已经对 make 官方规范 十分熟悉,并且在过去一年,我都在严格要求自己编写可移植 Makefile。...只有一个意外:在 Makefile ,第一个非特殊目标会被认为是 默认目标(default target)。调用 make 但是没有并没有指定一个目标,这个默认目标就会被自动选择。...如果你打算创建示例源文件,并调用 make, 你会发现它实际上已经知道了它该如何构建目标文件。...你可能需要告诉你编辑器如何做到这一点。 涉及子目录文件,在名字包含子目录即可。所有 make 关心内容都会跟之前一样正常工作,包括推断规则。...有很多教程讲述了如何在构建同时生成依赖,但是它很脆弱和缓慢。最好是在一次性完成,在 Makefile 写好依赖,以便于 make 能够如期工作。

1.3K10

Linux从入门到入土③(GCC、静态与动态链接库、Git、Make、Makefile)

静态库与动态库区别静态库代码在编译就拷⻉到应⽤程序,因此有多个程序同时引⽤⼀个静态库函数,内存中将会调⽤函数多个副本。由于是完全拷⻉,因此⼀旦连接成功,静态库就不再需要了,代码体积⼤。...动态库在程序内留下⼀个标记,指明程序执⾏,⾸先必须要载⼊这些库。在程序开始运⾏后调⽤库函数才被载⼊,被调⽤函数在内存只有⼀个副本,代码体积⼩。...:例如我们现在有一个文件夹结构如下:图片在这个目录中有几个关于算法源文件:add.c:加法源文件div.c:除法源文件mult.c:乘法源文件sub.c:减法源文件这每一个源文件里面都对应着不同算法函数...makefile 文件,分别位于不同项目目录==。...makefile 变量是没有类型,直接创建变量然后给其赋值就可以了。创建变量之后一定要赋值在给 makefile 变量赋值之后,如何在需要时候将变量值取出来呢?# 如何将变量值取出?

1.5K10

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

C语言工程很大,源码非常多时,如果还去使用GCC命令编译程序,几乎是不现实。这时候,可以通过编写shell脚本去执行编译命令,当然这并不是一种好方式。...简单说,以前我们编写C语言编译脚本是不能跨平台编译,例如上面示例编写 Makefile ,它只能在GCC环境下编译,通常是Linux系统上,而在Windows下Visual Studio里面就没法用...cmake -G "MinGW Makefiles" 要注意,以上命令直接在CMD命令行执行可能会报错,它需要一个sh环境,这里有两种解决办法 将sh.exe所在目录加入到环境变量,它位于MinGW...目录,包括Makefile,然后执行make编译。...文件,然后执行make命令进行编译,完成后build目录下即生成main.exe 链接已经编译好,推荐使用find_library来查找库,因为link_directories命令传入相对路径

3K30

Linux下automake工具使用(自动构建Makefile文件)

一、前言 linux环境下,项目工程很大时候,编译过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU计划,设计出了一种叫做Autoconf...但是如果通过查阅make帮助文档来手工编写Makefile,对任何程序员都是一场挑战。...1) flat指的是所有文件都位于同一个目录。 就是所有源文件、头文件以及其他库文件都位于当前目录,且没有子目录。Termutils就是这一类。...2) shallow指的是主要源代码都储存在顶层目录,其他各个部分则储存在子目录。 就是主要源文件在当前目录,而其它一些实现各部分功能源文件位于各自不同目录。...3) deep指的是所有源代码都被储存在子目录;顶层目录主要包含配置信息。 就是所有源文件及自己写头文件位于当前目录一个子目录,而当前目录里没有任何源文件

5.9K21

【Linux】Linux 项目自动化构建工具 -- makemakefile 使用

文章目录 一、什么是 make/makefile 二、如何编写 makefile 三、make 工作原理 1、make 使用 2、make 依赖性 3、项目清理 4、.PHONY 伪目标 四、Linux...、模块分别放在若干个目录;那么如何对这些源文件进行管理呢?...Linux 提供了项目自动化构建工具 – makefile 来帮助我们解决这个问题;makefile 定义了一系列规则来指定如何对众多源文件进行管理;makefile带来好处就是 – “自动化编译...---- 二、如何编写 makefile 编写 makefile,最重要编写 依赖关系和依赖方法;依赖关系是指一个文件依赖另外一个文件,即想要得到一个文件,目录下必须先有另外一个文件;依赖方法则是指如何根据依赖文件来得到目标文件...我们从键盘输入字符以及向显示器输出内容,并不会直接读入或输出,而是会先被存放到输入缓冲区与输出缓冲区,待缓冲区刷新时数据才会才会被读入或输出; 而行缓冲是缓冲区类型一种,在行缓冲下, 在输入和输出遇到换行符

1K00

用python写makefile

温馨提示:阅读本文同学最好能了解makefile和python编写规则。不懂同学可以先保存在收藏夹,以便日后查看。...所以最近花了几个晚上了解makefile编写规则。 开始时候,我参照网上一些makefile例子,写了一个初版makefile。然而这个makefile在编译我工程时候报错。...2、不同.o文件或不同.cpp文件处于不同目录下。 这时我找到两种解决方法: 1、就是用VPATH这个特殊变量,但是我不可能将所有要包含目录都一一手动包含进来,于是我放弃。...因为之前遇到这个困难,我特意去了解Qt生成makefile(其实这个makefile是依据.pro工程文件生成)。而这个makefile正是将所有的编译规则都列举出来。...通过遍历之前设定工程工作目录,调用SearchFiles遍历该目录下所有的源文件(.cpp),及设定目标文件(.o)绝对路径,最终是tuple形式保存到OBJ2SRC数组;还有的是将所有源文件保存在

6.2K40

手把手教你写一个 Makefile 文件

一、了解什么是 Makefile 一个大型工程源文件不计其数,各个功能或者模块分别放在不同目录下,手动敲命令去编译就带来很大麻烦,那么Makefile可以定义一系列编译规则,哪些文件需要先编译...编写完成后,执行make命令,make会在当前目录下找到名字为Makefilemakefile文件,程序就会自动运行,产生相应中间文件和可执行文件 a....那么Makefile如何判断文件是否有修改过呢?...、目标文件和可执行文件,分别放在不同目录,由Makefile统一管理这些文件,将生产目标文件放在目标目录下,可执行文件放到可执行目录下,分类目录如下图: bin目录:放可执行文件 include...目录:放头文件 obj目录:放中间目标文件 src目录:放源文件 可见原来那些文件都不在同一目录下了,那么这时候如果还用之前Makefile,make就没法处理了,自动推导也会无法进行,就需要改成如下

1.5K10

Linux不同共享库同名函数处理

场景引入: 在一个尚未成熟行业,一般行业标准是先于国家标准。这就导致了开发人员需要做很多兼容工作,再就是会用到很多其他厂商提供库与头文件,面对不同版本标准,一般会更新库与头文件。...那么此时如果要兼容新库和旧库要做怎样操作呢? ①两个C语言共享库之间有同名函数,链接时会报错么? ②如果不报错,调用顺序是如何确定呢? ③如果我想兼容两个库,该如何操作呢?...libOne.c是源文件、libOne.c是源文件对应头文件、libOneTest.h是对外暴露接口头文件。还有一个Makefile文件。 2....创建共享库与静态库Makefile文件编写 ################################################################# #...一、小结 两个共享库中有同名函数,调用函数顺序取决于链接库顺序。

2.9K10

Python中使用deepdiff对比json对象,对比如何忽略数组多个不同对象相同字段

最近忙成狗了,很少挤出时间来学习,大部分时间都在加班测需求,今天在测一个需求时候,需要对比数据同步后数据是否正确,因此需要用到json对比差异,这里使用deepdiff。...一般是用deepdiff进行对比时候,常见对比是对比单个json对象,这个时候如果某个字段结果有差异,可以使用exclude_paths选项去指定要忽略字段内容,可以看下面的案例进行学习:...上面的代码是一般单条数据对比情况。...从上图可以看出,此时对比列表元素的话,除非自己一个个去指定要排除哪个索引下字段,不过这样列表数据比较多时候,这样写起来就很不方便,代码可读性也很差,之前找到过一个用法,后来好久没用,有点忘了,今晚又去翻以前写过代码记录...这里对比还遇到一个问题,等回头解决了再分享: 就这种值一样,类型不一样,要想办法排除掉。要是小伙伴有好方法,欢迎指导指导我。

53820

6_Makefile与GCC

gcc在默认路径没有找到头文件,就到本选项指定目录中去找。在上面的例子创建一个目录,然后创建一个头文件test.h。...注意:在命令行,静态库夹在库必须位于调用该库目标文件之后。 6.2.2.4 代码优化选项 ​ gcc提供几种不同级别的代码优化方案,分别是0,1,2,3和s级,用-Olevel选项表示。...如果我们能够编写一个管理编译这些文件工具,使用这个工具来描述这些源文件编译,如何重新编译。为此“make”工具就此诞生。...不过上面的Makefile仍然有问题,就是工程源文件不断增加,如果按照上面的写法,你会发现,Makefile会越来越臃肿。下面我们讲解如何解决这个臃肿问题。...6.4.3 Makefile规则 6.4.3.1 命名规则: ​ 一般来说将Makefile命名为Makefilemakefile都可以,很多源文件名字是小些,所以一般使用Makefile

3.5K10
领券