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

如何在makefile中使用不在当前目录中的源文件?

在makefile中使用不在当前目录中的源文件,可以通过指定源文件的路径来实现。

首先,需要确保makefile中的目标文件路径正确设置。目标文件路径可以通过变量来定义,例如:

代码语言:txt
复制
OBJ_DIR = obj

然后,在编译规则中,指定源文件的路径。假设源文件位于src目录下,可以使用相对路径或绝对路径来指定源文件的位置。例如:

代码语言:txt
复制
$(OBJ_DIR)/%.o: src/%.c
    gcc -c $< -o $@

上述规则中,$<表示依赖文件列表中的第一个文件,$@表示目标文件。

此外,还可以使用通配符来匹配多个源文件。例如,如果src目录下有多个.c文件,可以使用以下规则:

代码语言:txt
复制
$(OBJ_DIR)/%.o: src/%.c
    gcc -c $< -o $@

这样,makefile会自动匹配src目录下的所有.c文件,并将其编译为对应的目标文件。

需要注意的是,如果源文件位于其他目录中,还需要确保编译器能够找到相关的头文件。可以通过设置编译器的搜索路径来实现,例如:

代码语言:txt
复制
CFLAGS = -Iinclude

上述示例中,-Iinclude表示将include目录添加到编译器的搜索路径中。

综上所述,通过在makefile中指定源文件的路径,并设置正确的编译规则和搜索路径,就可以在makefile中使用不在当前目录中的源文件。

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

相关·内容

DDD Go 落地 | 如何在业务中使用领域事件?

作者 | 于振 责编 | 韩楠 朋友,你好,今天我想与你聊聊如何在业务中正确使用领域事件,通过前面几篇文章分享,相信你对 DDD Go 如何落地已经有了一定了解。...因为这两个属性比较重要,我们用一个接口来表示通用领域事件: 注意这里 Id() string 方法返回并不是某个领域实体唯一标识,而是当前领域事件唯一标识。...• 我们推荐实际业务中使用最后一种方式,虽然看起来复杂一些,但是我们可以对关键逻辑进行封装,从而减轻使用成本。具体我们会在最后一篇文章中进行详细介绍。...方法参数一般是 Context 和对应监听领域事件,而返回值只是一个error,用来标识当前处理是否成功。...幂等性消费有很多种实现方式,比较通用办法是记录下当前已经消费了消息唯一id,下次再收到该类型消息时,先根据唯一id检查是否已经消费过。

1.5K30

Makefile学习1

linux下编写程序,因为早期没有成熟IDE,一般都是使用不命令进行编译:将源文件分别使用编译器、汇编器、链接器编译成可执行文件,然后手动运行。...如果你要在你 Makefile 中使用“#”字符,可以用反斜框进行转义,:“#”。...,make解析Makefile还会引入一些系统环境变量,编译参数CFLAGS、SHELL、MAKE等。...如果不希望命令行指定变量值替代Makefile原来定义,那么我们可以Makefile中使用指示符 override 对这个变量进行声明: .PHONY: all override web =...递归执行 实际工程项目中,各个源文件通常存放在各个不同目录,make在编译工程项目时,会依次遍历各个不同目录,编译每个子目录源文件

34010

Ubuntu下如何安装并使用Objective-C

对OS X或iOS编程过朋友应该对Foundation库不陌生吧,这个就是gnustep库里,如果不装此库,你连NSObject都用不了,呼呼~先安装gnustep sudo apt-get...在编译之前,我们进入 /usr/share/GNUstep/Makefiles 目录,来对编译环境进行设置,在当前控制台(terminal)执行: sudo bash /usr/share/...C11标准才引入Unicode前缀字面量表达式——u'加',表示一个UTF-16字符,因此我们GNUmakefile也加入了-std=gnu11这个编译选项来使得编译器使用最新C11标准与GNU...所以最好方式还是通过利用makefile来解决问题,呼呼~ 下面提一下Objective-C与纯C以及汇编混编情况。...由于GNUStep提供makefile package仅仅提供了C、C++、Objective-C以及Objective-C++这四种编程语言,而不支持汇编语言,因此,如果要在GNUStep工程中使用汇编

81600

何在Kerberos环境CDH集群外跨OS版本指定目录配置HDFSGateway节点

集群外配置非Kerberos环境Gateway节点》和《如何在CDH集群外配置Kerberos环境Gateway节点》,本文档在这两篇文档本篇文章基础介绍如何在Kerberos环境CDH集群外跨OS...版本指定目录配置HDFSGateway节点。...4.创建指定文件目录,并将集群KDC服务器上/etc/krb5.conf文件拷贝至(vm1.macro.com和rhel66001.localdomain)节点指定目录下查看,两个Gateway...解决办法: hadoop客户端启动脚本上指定Kerberos配置文件路径,HADOOP_CLIENT_OPTS 添加配置-Djava.security.krb5.conf=$KRB5_CONFIG...5 问题描述与解决 1.core-site.xml 文件找不到异常 ? 该问题是由于CDHhadoop客户端配置默认是/etc/hadoop目录下,确认软链无误,并且配置正确 ?

1.3K20

Makefile教程

Unix(MAC OS、Solaris)和Linux(Red Hat、Ubuntu、SUSE)系统下由make命令调用当前目录Makefile文件,实现项目工程自动化编译。...如果你要在你Makefile中使用“#”字符,可以用反斜框进行转义,:“#”。 如果想多行注释的话,注释行结尾加行反斜线(\),下一行也被注释,这样就是可以实现多行注释了。...(1)make会在当前目录下找名字叫“Makefile”或“makefile文件; (2)如果找到,它会找文件第一个目标文件(target),并把这个文件作为最终目标文件; (3)如果.../lib 指明Makefile寻找依赖项时,若当前工作目录不存在,则去VPATH指明目录去寻找。各目录以“:”号隔开。 (4)编译器。...7.12makfileinclude、-include与sinclude区别 include:包含其它Makefile当前Makefile,作用类似于C/C++#include预处理指令。

3.9K53

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

项目中使用库一般有两个目的:一个是为了使程序更加简洁不需要在项目中维护太多源文件,另一方面是为了源代码保密,毕竟不是所有人都想把自己编写程序开源出来。...动态链接库是目标文件集合,目标文件动态链接库组织方式是按照特殊方式形成。库函数和变量地址使用是相对地址(静态库中使是绝对地址),其真实地址是应用程序加载动态库时形成。...例如:前提:刚创建repo_git目录(或子目录)下建立文件, “README.txt”,添加内容git add README.txt # 没有输出git commit –m “A description...版本回退后续开发需要修改之前文件,README.txt, 想退回之前版本涉及命令:git status:status命令是用来查看当前工作区状态,也就是说它会把当前工作区所有文件状态和本地分支上最近一次提交进行比较...makefile 变量是没有类型,直接创建变量然后给其赋值就可以了。创建变量之后一定要赋值在给 makefile 变量赋值之后,如何在需要时候将变量值取出来呢?# 如何将变量值取出?

1.5K10

Linux 下make命令与Makefile

利用make工具,我们可以将大型开发项目分解成为多个更易于管理模块,一个工程源文件不计数,其按类型、功能、模块分别放在若干个目录makefile定义了一系列规则来指定,哪些文件需要先编译,...Make工作原理 当make 命令被执行时,它会扫描当前目录Makefilemakefile文件找到目标以及其依赖。...要达到这一目的很简单,需make命令后直接跟目标的名字就可以完成(如前面提到“make hello_kitty”形式)任何在makefile目标都可以被指定成终极目标,甚至没有被我们明确写出来目标也可以成为...一旦依赖目标% 模式被确定,那么,make会被要求去匹配当前目录下所有的文件名,一旦找到,make就会规则下命令,所以,模式规则,目标可能会是多个,如果有模式匹配出多个目标,make就会产生所有的模式目标...这七个自动化变量还可以取得文件目录名或是在当前目录符合模式文件名,只需要搭配上D 或F 字样。这是GNUmake老版本特性,新版本,我们使用函数dir或notdir就可以做到了。

10.1K20

makefile

注:个人学习所记,仅供参考 实验七:Makefile实验 实验原理 Linux或Unix环境下,对于只含有几个源代码文件小程序(hello.c)编译,可以手工键入gcc命令对源代码文件逐个进行编译...这种依赖关系源文件程序编译尤其重要,通过这种依赖关系定义,make工具可避免许多不必要编译工作。...(5)注释:Makefile只有行注释,和UNIXShell脚本一样,其注释是用“#”字符,如果你要在你Makefile中使用“#”字符,可以用反斜杠进行转义,:“\#”。...如果文件都没有指定绝对路径或是相对路径的话,make首先会在当前目录下寻找,如果当前目录下没有找到,那么,make还会在下面的几个目录下找: (1)如果make执行时,有“-I”或“--include-dir...make命令,GNU make找寻默认Makefile规则是在当前目录下依次找三个文件——“GNUmakefile”、“makefile”和“Makefile”。

1.9K00

翻译qmake文档(一) qmake指南和概述

这个方法能够控件源文件 使用,并允许在这个过程步骤被简单描述,通常这些描述会在一个文件里。qmake 扩展每一个项目文件里信息到makefile,用于执行编译和连接所必须命令。...许多简单项目里,只需要声明用来构建有一些基本配置选项项目的源文件和头文件,更多关于如何创建简单项目文件信息,请看GettingStarted      你可以为复杂项目创建更复杂项目文件,项目文件概述...你可以项目文件中使变量和方法更详细信息,请查看Reference。      ...构建一个项目      对于许多简单项目,你只需工程顶层目录运行qmake就可以生成Makefile.然后,你可以根据makefile运行平台make 工具构建项目。      ...使用第三方库  Third Party Libraries指南为你展示如何在项目中使用简单第三方库  预编译头文件      大项目中,有可能会利用预编译头来提高构建过程。

1.5K70

探索Linux内核:Kconfig秘密

例如,您可能在组件makefile中看到这样语句: obj-$(CONFIG_GENERIC_CALIBRATE_DELAY) += calibrate.o autoconf.hC语言源文件中使用...通过将源文件划分为不同模块/组件,每个组件都由自己Makefile管理。当您开始构建时,顶级Makefile按正确顺序调用每个组件makefile,构建组件,并将它们收集到最终执行程序。...顶部makefile包含archmakefile,读取.config文件,进入子目录,调用制作,使定义例程帮助下实现每个组件makefile。...看看如何在Linux内核实现递归make,并借助简化Makefile代码: # In top Makefile vmlinux: scripts/link-vmlinux.sh $(vmlinux-deps...管理一个大型项目时,您需要很多这样规则;所有这些规则都会乏味。幸运是,大多数现代C编译器可以通过查看#include源文件行。

1.7K11

Linux makefile 教程 非常详细,且易懂

如果你要在你Makefile中使用“#”字符,可以用反斜框进行转义,:“/#”。 最后,还值得一提是,Makefile命令,必须要以[Tab]键开始。...波浪号(“~”)字符文件名也有比较特殊用途。如果是“~/test”,这就表示当前用户$HOME目录test目录。而“~hchen/test”则表示用户hchen宿主目录test目录。...四、文件搜寻 一些大工程,有大量源文件,我们通常做法是把这许多源文件分类,并存放在不同目录。...四、嵌套执行make 一些大工程,我们会把我们不同模块或是不同功能源文件放在不同目录,我们可以每个目录中都书写一个该目录Makefile,这有利于让我们Makefile变得更加地简洁,...要达到这一目的很简单,需make命令后直接跟目标的名字就可以完成(如前面提到“make clean”形式) 任何在makefile目标都可以被指定成终极目标,但是除了以“-”打头,或是包含了“=

4.3K20

全网最牛Linux内核Makefile系统文件详解(纯文字代码)

三、make是如何工作 默认方式下,也就是我们只输入make命令。那么, 1、make会在当前目录下找名字叫“Makefile”或“makefile文件。...如果你要在你Makefile中使用“#”字符,可以用反斜框进行转义,:“\#”。 最后,还值得一提是,Makefile命令,必须要以[Tab]键开始。...波浪号(“~”)字符文件名也有比较特殊用途。如果是“~/test”,这就表示当前用户$HOME目录test目录。而“~hchen/test”则表示用户hchen宿主目录test目录。...四、文件搜寻 一些大工程,有大量源文件,我们通常做法是把这许多源文件分类,并存放在不同目录。...四、嵌套执行make 一些大工程,我们会把我们不同模块或是不同功能源文件放在不同目录,我们可以每个目录中都书写一个该目录Makefile,这有利于让我们Makefile变得更加地简洁,

3.1K20

通用Makefile使用及解析

四、怎么使用这套 Makefile: 1.把顶层 Makefile, Makefile.build 放入程序顶层目录 各自子目录创建一个空白 Makefile 2.确定编译哪些源文件.../example/ ②、 example 子目录 a 创建一个空白 Makefile touch Makefile ③、确定要编译哪些源文件,按照需求修改 Makefile 、编译顶层目录...LDFLAGS,源文件都编译成 .o 文件后姚链接起来,你可以来指定链接选项,比如说你可以指定库在哪里,以及指定使用哪个一个库 LDFLAGS := -L 库路径 -l库名称 我们程序里用不着指定...①、 Makefile 文件确定要编译文件、目录,比如: obj-y += main.o obj-y += a/ “Makefile” 文件总是被 “Makefile.build” 包含。...怎么编译当前目录文件?

45320

makefile介绍 通俗易懂

使用Makefile文件创建可执行称为‘FY’文件,键入:make 使用Makefile文件从目录删除可执行文件和目标,键入:make clean 在这个Makefile文件例子: 目标包括可执行文件...依赖是C语言源文件和C语言头文件‘main.c’和‘defs.h’等。事实上,每一个OBJ文件既是目标也是依赖。...make是如何工作 在编译过程,我们通常只是输入一个make命令,那它到底是怎么运行工作呢? 首先make会在当前目录下查找名称为“Makefile”或者“makefile文件。...使用变量简化makefile文件 例子,我们‘FY’生成规则把所有的OBJ文件列举了两次 如果我们FY项目中又新加入了一个.c文件,那么Makefile需要好几处都做改动。...目录删除文件规则 对于编写习惯养成而言,我们最好在每个Makefile中都写一个清空目标文件clean命令,这样有利用重新编译。

82200

Makefile经典教程(掌握这些足够)

1.3 make是如何工作 默认方式下,也就是我们只输入make命令。那么,   make会在当前目录下找名字叫“Makefile”或“makefile文件。  ...如果你要在你Makefile中使用“#”字符,可以用反斜框进行转义,:“\#”。 最后,还值得一提是,Makefile命令,必须要以[Tab]键开始。...3.4 文件搜寻      一些大工程,有大量源文件,我们通常做法是把这许多源文件分类,并存放在不同目录。...4.4 嵌套执行make        一些大工程,我们会把我们不同模块或是不同功能源文件放在不同目录,我们可以每个目录中都书写一个该目录Makefile,这有利于让我们Makefile...要达到这一目的很简单,需make命令后直接跟目标的名字就可以完成(如前面提到“make clean”形式)任何在makefile目标都可以被指定成终极目标,但是除了以“- ”打头,或是包含了“=

2.7K20

翻译qmake文档(三) Creating Project Files

项目文件元素      qmake使用项目文件格式可以支持简单和复杂构建系统使用。简项目文件使用简单声明样式,定义标准变量,用于指出项目中使头文件和源文件。...简单项目里,这些变量通知qmake使用相关配置信息,或者提供文件名和路径构建过程使用。      qmake每个项目文件查找某些变量,并使用这些内容用于确定什么要写到 makefile里。...举例,HEADERS和SOURCES里变量列表用于告诉qmake相同目录头文件和源文件做为项目文件。      ...QT 项目中使Qt模块列表 RESOURCES 最终项目中包含源文件(.qrc)列表。更多资源文件详细信息查看   The Qt Resource System 。...当使用subdirs模板时,qmake生成一个makefile用来检查每一个子目录,处理目录里找到工程文件,并执行平台make 工具生成新Makefile

93060

Makefile学习2

Makefile学习2 Makefile条件判断 使用条件判断,可以让make在编译程序时,根据不同情况,执行不同分支:可以执行不同命令,使用不编译参数,生成不同目标。...如果变量值非空(Makefile,没有定义变量值为空),表达式为真。...给函数传递参数函数中使用 (0)、 (1)引用。 用户自定义函数使用call函数间接调用,各个参数之间使用空格隔开。...:所有更新过依赖文件 Makefile,通配符主要用在两个场合: 用在规则目标和依赖:make在读取Makefile时会自动对其进行匹配处理 test: *.o gcc -o $@ $...需要一些函数(wildcard)来实现。如果想列举当前目录所有C文件,可以直接使用wildcard函数: $(wildcard *.c)

30610
领券