写makefile碰到点问题

本文介绍了一次使用Makefile进行项目编译时遇到的问题及解决过程。主要问题出现在链接阶段,仅一个.o文件被链接,而非预期的多个。通过逐步排查,发现编译指令中的$<符号导致了问题,最终将$<替换为$(OBJS)解决了该问题。
部署运行你感兴趣的模型镜像

今天同事有个工程要移到linux下,让我给他写了一个makefile的demo。结果我写的demo是可以编译运行了,但是加入了他的东西以后就是编译不出来。没办法,只能一点一点去找原因,结果发现在最后链接的时候,怎么只有一个.o文件。但是在makefile文件里面定义的是有多个的!再看一下编译选项,

$(TARGET):$(OBJS)
        $(CC) $(FLAG) -o $@ $<

好像也没有什么问题哦。在终端直接把编译的相关OBJ加上去,一编译就成功了,好像还是这个编译选项有问题。

想啊想啊,最后想到了$<,这个好像代表的是冒号(:)后面的第一个值,原来是这样啊,那直接用$(OBJS)来代替$<,结果一编译就成功了。

附makefile例子:

CC = g++

BINDIR = ../../../bin

OBJDIR = ../../../obj

FLAG = -Wall -g

OBJS = $(OBJDIR)/classtest.o $(OBJDIR)/inclass.o

TARGET = $(BINDIR)/classtest

all:$(TARGET)

$(TARGET):$(OBJS)
        $(CC) $(FLAG) -o $@ $(OBJS)

$(OBJDIR)/classtest.o:classtest.cpp
        $(CC) $(FLAG) -o $@ -c $<
$(OBJDIR)/inclass.o:inclass.cpp
        $(CC) $(FLAG) -o $@ -c $<

clean:
        rm -rf $(TARGET) $(OBJS)

 

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

### 关于 Makefile 的完整实验报告 Makefile 是一种用于自动化构建过程的工具,广泛应用于 C/C++ 项目的编译和管理。它通过定义一系列规则来指定如何生成目标文件以及执行特定的任务。 #### 使用指南 Makefile 文件的核心是由规则组成的,每条规则由三部分构成:目标(target)、依赖(dependencies) 和命令(commands)[^5]。以下是基本语法: ```makefile target: dependencies command ``` 例如,在一个简单的项目中可以这样编 Makefile 来编译单个源文件并生成可执行文件: ```makefile hello: hello.c gcc -o hello hello.c ``` 这里的目标是 `hello`,它的依赖项是 `hello.c`,当 `hello.c` 发生变化时会重新编译生成新的 `hello` 可执行文件[^5]。 #### 示例代码 更复杂的例子涉及多个源文件的情况。假设有一个程序包含两个 `.c` 文件 (`main.c`, `func.c`) 和它们各自的头文件(`main.h`, `func.h`) ,那么完整的 Makefile 如下所示: ```makefile CC=gcc CFLAGS=-Wall -g all: program program: main.o func.o $(CC) main.o func.o -o program main.o: main.c main.h func.h $(CC) $(CFLAGS) -c main.c func.o: func.c func.h $(CC) $(CFLAGS) -c func.c clean: rm -f *.o program ``` 在这个例子中,“all”是一个伪目标(pseudo-target),表示默认要做的操作;而 “clean” 则是用来清理临时文件的一个额外规则[^5]。 #### 学习资料推荐 除了官方文档外,还有许多在线教程可以帮助初学者快速掌握 Makefile 的基础知识及其高级特性。比如,《Effective Make》是一本非常受欢迎的手册,涵盖了从基础到深入的主题[^4]。另外,也可以参考一些开源项目的实际应用案例来加深理解[^1]。 #### 实验报告建议结构 一份标准的 Makefile 实验报告应该至少包括以下几个方面: 1. **简介**:解释什么是 Makefile, 它的作用是什么? 2. **准备工作**:列出所需的软硬件环境准备情况。 3. **具体实现步骤**:详细介绍你是怎样一步步完成任务的,附带截图或者重要片段展示效果。 4. **遇到的问题及解决办法**:记录调试过程中碰到困难的地方以及解决方案。 5. **总结反思**:谈谈这次实践对你个人技能提升的帮助在哪里? ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值