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

用一个Makefile编译两个目标

Makefile是一种用于自动化构建和编译程序的工具,它可以根据文件的依赖关系和规则来决定哪些文件需要重新编译。通过Makefile,可以将编译过程中的各个步骤自动化,提高开发效率。

在编译两个目标的情况下,可以通过Makefile来实现。以下是一个示例的Makefile文件:

代码语言:txt
复制
# 定义编译器和编译选项
CC = gcc
CFLAGS = -Wall

# 定义目标文件和依赖关系
TARGETS = target1 target2
OBJS = obj1.o obj2.o

# 默认目标
all: $(TARGETS)

# 目标1的编译规则
target1: obj1.o
    $(CC) $(CFLAGS) -o $@ $^

# 目标2的编译规则
target2: obj2.o
    $(CC) $(CFLAGS) -o $@ $^

# 目标文件的编译规则
%.o: %.c
    $(CC) $(CFLAGS) -c $< -o $@

# 清理生成的文件
clean:
    rm -f $(TARGETS) $(OBJS)

在上述Makefile中,定义了两个目标文件target1和target2,它们分别依赖于obj1.o和obj2.o这两个目标文件。通过定义目标文件的编译规则,可以使用gcc编译器将目标文件编译成可执行文件。同时,还定义了一个默认目标all,它依赖于所有的目标文件。

使用Makefile编译两个目标时,可以在命令行中执行以下命令:

代码语言:txt
复制
make

这样,Makefile会根据目标文件的依赖关系和规则,自动编译生成target1和target2两个可执行文件。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储等。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方文档或咨询腾讯云的客服人员。

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

相关·内容

透过一个编译报错,总结两个Go程序编译的重要知识

具体怎么呢,比如这个例子里是需要在Mac环境下编译能在Linux系统amd64架构下运行的执行文件,就得酱婶进行编译: CGO_ENABLED=0 GOOS=linux GOARCH=amd64...go build main.go 不过我后来想研究下为啥不让在 Mac 上编译,看了看这个包的探针是CGO实现的调用了linux系统下的一个C语言实现的工具命令。...看到这我已经不想继续研究这个包了,那么为了让此篇文章水的不那么明显:),接下来咱们就把Go语言的交叉编译和条件编译两个知识点再复习一遍吧。...交叉编译 交叉编译是用来在一个平台上生成另一个平台的可执行程序。...(咳嗽声)引出来的交叉编译和条件编译编译约束)这两个非常重要的知识点,其实这两个知识点在很早之前我也写过篇文章,这次相当于从实际遇到问题带出从头开始再分析一遍,希望大家能喜欢。

2.7K10
  • 两个栈实现一个队列

    1 问题 两个栈实队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。...(若队列中没有元素,deleteHead 操作返回) 2 方法 定义两个栈stackln和 stackOut:前者对应上面分析的第一个栈,只用于尾部插入;后者对应第二个栈,只用于头部删除。...stackIn的数字倒序导入stackout中 self.stack0ut.append(self.stackIr # 弹出stackout return self.stackout.pop() 3 结语 针对两个栈实现队列的问题...,提出运用两个栈的方法,第一个栈只用于尾部插入,第二个栈只用于头部删除。...在需要删除队列头时,如果第二个栈中还有数字,就把其栈顶弹出即可,否则就把第一个栈的所有数字都逆序导入第二个栈中,然后再弹出第二个栈的栈顶。如果两个栈都没有数字,就返回-1。

    10810

    JavaScript实现一个编译

    现在前端开发中,我们常常会用到babel来编译例如react、vue框架的代码,以支持更多的(更古老的)浏览器,babel编译代码的过程就是编译原理的应用之一。...身为前端工程师,因此有必要了解编译原理,幸运的是,“The Super Tiny Compiler”开源项目利用JavaScript写了一个简单的编译器。...,可以将我们的原代码,转换(编译)到目标代码,例如把javascript代码转换到python一样。...(源代码)LISP CODE: (add 2 (subtract 4 2)) (目标代码)C CODE: add(2, subtract(4, 2)) 2.1 解析(Parse) 具象到具象的转换是很难的...解析的过程中包含了两个关键步骤词法分析(Lexical Analysis)和语法分析(Syntactic Analysis),解析就是一个具象到抽象的过程。

    93540

    第一次10万一个狗版license编译编译代码

    说实话,以前也用过正版的编译器,我记得之前用过正版的IAR编译器license也没有多贵,而最近用了个10万一个license的编译编译嵌入式代码,因为对功能安全有要求,而这个Greenhills就是过了功能安全认证的...一般在汽车电子行业的比较多。工业行业一般都用IAR和MDK。那个license 大家都知道怎么搞。今天就来看下这个GH的集成开发环境和编译器。 集成开发环境IDE是MULTI,有不少功能。...这个编译器有好多认证,如果产品要过功能安全认证,一般才会选择使用,看网站介绍确实很牛逼,具体深入的还没有研究,但是感觉编辑界面很一般,待后续研究过后来跟大家分享这款编译器。有使用过的可以后台留言讨论。

    85130

    【Rust日报】Rust从头实现一个C编译

    一个声明式解析库 Untwine 发布0.4 Untwine是一个声明性解析库,它允许一种类似于使用自定义宏语法进行直接模式匹配的解析风格。...一个辅助函数对两个数字进行运算 使用untwine制作的解析器也有高质量的错误消息,可以直观地显示错误和相关语法。...(left, op, right)) } pub expr = add -> f64; } 更多信息查看 GitHub,https://github.com/boxbeam/untwine Rust...从头实现一个C编译一个针对 MacOs 和 Linux 的 x86-64 的 C99 编译器,它没有任何依赖项,并且是独立的,因此可以通过单个命令进行安装(请参阅安装)。...它还提供了一个派生宏,将为您派生此特性。最后,它提供了一个测试宏,用于对某个类型的所有值运行基于属性的测试。

    12710

    C写一个web服务器(三) Linux下GCC进行项目编译

    绕了好久,终于来到了本篇文章的主题:项目编译,主要介绍一些 GCC 在 linux 下项目编译链接的步骤。...编译步骤 先说一下一个C源文件的编译一般步骤: 预处理(preprocess):主要是在代码层面的处理,包括文件的引入,展开宏定义,删除注释,添加行号等,生成的文件以.i结尾。...自动化才是目标,我们考虑使用自动化编译工具 cmake,那么接下来我们就要编写适合项目文件的编译配置文件 CMakeLists。...CMakeLists 是一个 txt 文件,它就像是项目的编译指南,是给 cmake 工具的。...这里要先声明产生的可执行文件,以便后面连接 SET(cJSON cJSON.c) # 设置文件变量 ADD_LIBRARY(cJSON SHARED ${cJSON}) # 此语句文件变量生成一个动态链接库

    1.5K100

    一步步写属于自己的makefile

    聪明的程序员自然不会这么傻:如果下一个shell脚本,让其批量处理所有的文件不就好了吗。基于这个目的,Makefile诞生了。 对于上面的编译命令,有两个编译选项,-c和-o。...所以,有时候需要删除之前编译的结果,makefile提供了为目标clean,一个小的完整makefile如下所示: # hello由hello.o生成,所以hello依赖于hello.o; # 依赖关系冒号...# 如果此处只有一个依赖文件,比如hello.o,也可以$<替代$^ # 这时候因为目标文件已经脱离了源文件的环境, # makefile隐含规则自动编译已经不可行了。...也可以$<替代$^ # 这时候因为目标文件已经脱离了源文件的环境, # makefile隐含规则自动编译已经不可行了。...这时候因为目标文件已经脱离了源文件的环境, # makefile隐含规则自动编译已经不可行了。 # 我们显式执行编译。 # 2.

    64130

    【Linux】自动化构建工具-makeMakefile详解(6)

    一.make/Makefile背景简介 会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile...定义了一系列的 规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂 的功能操作 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令...可见,makefile都成为了一 种在工程方面的编译方法。 make是一条命令,makefile一个文件,两个搭配使用,完成项目自动化构建。...详情见下文 二.依赖关系与依赖方法 引入:为了带大家更好了解依赖关系和依赖方法,YY下面给大家带来一个例 我们先用vim创建一个makefile文件,并在当中[插入模式]中写入如图所示的依赖关系...】表示文件 【@】表示目标文件,【^】表示冒号右侧文件

    23410

    【Linux系统编程】Linux项目自动化构建工具——makeMakefile

    可见,makefile都成为了一 种在工程方面的编译方法。 make是一条命令,makefile一个文件,两个搭配使用,完成项目自动化构建。...也就是说,想完成项目的自动化构建,我们需要两个东西 一个是make,它是一条指令,那我们到时候可以直接,另一个makefile,它是一个文件,这个文件由我们自己创建,一般就直接创建在当前源代码所在路径下...我们把目标文件和他所依赖的文件列表之间的关系称为依赖关系,对应的命令称为依赖方法 所以: makefile一个国绕依赖关系和依赖方法构建的一个自动化编译的工具 3.2 依赖关系与依赖方法的理解...通过使用make,你可以只重新编译已修改的源文件,而不是整个项目,提高了编译的效率。 makefile一个文本文件,它包含了构建目标(target)和构建规则(rule)。...使用make和makefile的主要步骤如下: 创建一个makefile文件,并为各个目标指定构建规则。 在makefile中定义源文件之间的依赖关系以及对应的编译命令。

    25910

    Linux基础——Linux开发工具(下)_makemakefile

    如果对这两个工具不太了解,可以先阅读这两篇文章: Linux开发工具 (vim) Linux开发工具 (gcc/g++) 首先让我们来初步了解一下本篇的目标: 1....可见,makefile都成为了一种在工程方面的编译方法。 make是一条命令,makefile一个文件,两个搭配使用,完成项目自动化构建。...这就完成了一个简单的makefile文件,包含了编译和删除功能 我们vim编写一下test.c 在编写完成,保存退出后,我们实现自动化构建代码只要: 指令:make 如果想执行删除功能...在上面编写的Makefile中 指令:make 和 make mytest执行后的结果是一样的 因为直接使用make时,会从上到下扫描makefile文件,扫描到第一个目标文件,就会执行它,所以makefile...,但是每一个表示的含义都不一样,让我来简单介绍一下 在每次做出对应操作之后相应时间都会改变 注意:access时间不是实时更新的 因此系统通过时间的对比不让我们频繁的进行编译代码操作,而伪目标的作用就是强制执行指令

    17510

    Makfile文件的编写

    该指令是读入一个名为makefile 的文件,然后执行这个文件中指定的指令。...Makefile: 一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作...Makefile编写 以下是本人自己比较喜欢Makefile的使用方式的总结,一般为单个项目产生单个可执行文件,一般是控制台程序或者opencv相关 简单的多文件的C/C++控制台程序 文件目录是...C++的项目就需要在main生成的命令里面把gcc编译程序换成g++ 解释 上述是我的C/C++多文件编译一般使用的Makefile编写风格,因为没有特殊的中间文件操作,所以都是的make的自动规则...中间文件,这两个文件需要在下一部分中声明其生成方式。

    69030

    【Linux操作系统】自动化编译make和Makefile

    二.makefile文件规则 1.基本规则 2.举一个例子 3.伪目标 4.其他规则 三.文件三个时间问题-make程序 1.三个时间何时更新 2.touch的两个作用 3.make程序如何知道依赖文件是否更新...一.make/makefile简介 1.什么是make,makefile? make是一个构建C++项目的工具/命令;makefile一个包含编译命令的脚本文件。...Linux环境下开发,工程源文件较少时,可使用gcc直接编译;但当工程源文件较多时,gcc直接编译复杂(比如命令较多,文件的编译先后顺序确定问题等)且不易于后期项目的维护,因此采用make/makefile...ps: makefile文件名也可叫:Makefile makefile文件中注释“#” test:test.c #依赖关系 gcc test.c -o test #依赖方法...li li 74 Jan 7 18:48 test.c 2.touch的两个作用 我们知道touch命令可以创建一个文件,还有一个作用就是对现有文件更新这三个的时间为系统时间.

    84540

    makefile从入门到放弃——博主吐血整理的笔记

    一个工程中的源文件不计其数,并且按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作...makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。...) 创建每个目标体时需要运行的命令(command) 注意:命令前必须是一个“TAB键”,否则编译错误为:*** missing separator....文件: $ make #默认生成第一个文件 $ make '目标名'#选择性的编译 当工程中的文件名和makefile中的目标重名时,就会有伪目标。...Makefile 中还有两个变量不管是不是使用关键字 “export” 声明,它们总会传递到下层的 Makefile 中。

    1.7K20

    Linux项目自动化构建工具-makeMakefile

    前言 makefile有什么?...可见,makefile都成为了一种在工程方面的编译方法。 make是一条命令,makefile一个文件,两个搭配使用,完成项目自动化构建。...运行文件 以上代码实例快速感受一下make指令 说明原理 make是一条命令,makefile一个文件,两个搭配使用,完成项目自动化构建。...makefile,读取makefile里的内容,根据依赖关系去形成目标文件。...文件内容时,是从上往下读取,默认认形成第一个目标文件 习惯上把形成可执行程序放在上面,make就可以直接形成 在编译时,默认情况下,如果可执行程序是最新的了,make就不会再去编译,如果就想让编译这个操作总是可以被执行

    16810

    深度刨析makefile

    已经内置做好了 makefile 的工作,而初学 Linux 时编译两个源文件似乎也用不到 makefile ,只要 gcc 一下就好了。...二、makefile 是怎么工作的 1. makefile 的三要素及命名 首先,makefile 中有三要素:目标(要生成什么)、依赖(什么去生成)、和命令(如何去生成),这三个要素组成一个规则。...④ 变量定义 我们可以定义变量,比如说我们可以把所有的 .c 文件定义为一个 Src 变量,这样在编译命令中就可以 Src 变量来代替所有的 .c 文件。...TAGS 这个伪目标功能是更新所有的目标,以备完整地重新编译使用。 check 和 test 这两个目标一般用来测试 makefile 的流程。...首先我们建立两个目录,每个目录下都包含一个 makefile 文件 两个 makefile 文件的内容如下,在 dir2 目录下的 makefile 调用了 dir1 目录下的 makefile 文件

    10310

    makefile

    实际上,GNU make工具通过一个称为Makefile的文件来完成对应用程序的自动维护和编译工作。...也就是Makefile中最核心的内容。 例如,假设有一个C源文件test.c,该源文件包含有自定义的头文件test.h,则目标文件test.o明确依赖于两个源文件:test.c和test.h。...一个makefile文件中可定义多个目标,利用make target命令可指定要编译目标,如果不指定目标,则使用第一个目标。...(4)文件指示:其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C语言中的预编译...(5)注释:Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是“#”字符,如果你要在你的Makefile中使用“#”字符,可以反斜杠进行转义,如:“\#”。

    2K00
    领券