我是 Makefile 编写领域的新手。我有一个 C 项目,我想使用 GCC 构建,我可以编写一个非常好的 Makefile,它调用3 个其他 Makefile,存在于项目的不同目录结构中,递归地,然后将各自的源文件发送到 GCC 编译器。此步骤的结果是我能够看到 (5) 个源文件的所有(5) 个目标文件。
对象文件名(按生成顺序)-
Makefile1
图像处理.o (1)
morpho.o (2)
PivBlb.o (3)
Makefile2
main.o (4)
Makefile3
bmp.o (5)
有信心看到所有预期的目标文件。我现在在 Makefile3 中添加其他规则,以链接所有目标文件,链接器将开始给出错误部分,如下所示下面。
不仅如此,之前生成的最后一个目标文件 (bmp.o (5)) 不再生成了,我对最后一个的新更新我猜是 makefile 导致了这个问题。
这里发生了什么?有什么提示吗?
我还仅粘贴最后一个 Makefile - Makefile3 的内容,其中存在链接规则,位于错误部分下方。
谢谢
-V
-------------------------------------
**Errors**
make[1]: Entering directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/Algorithm'
make[1]: `all' is up to date.
make[1]: Leaving directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/Algorithm'
make[1]: Entering directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/exe'
make[1]: `all' is up to date.
make[1]: Leaving directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/exe'
make[1]: Entering directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/IO'
make[1]: Leaving directory `/cygdrive/c/Vikram/Projects/LOD_IMX_Project_v1/LOD1/IO'
make[1]: *** No rule to make target `../LOD1/Algorithm/imageprocessing.o', needed by `final'. Stop.
make: *[all] Error 2
----------------------------------------
Makefile3
CC = $(TOOLS)/gcc
HFLAG = ../IO/inc
CCFLAGS = -mcpu=$(HW)
OBJ1 = ../LOD1/Algorithm/imageprocessing.o ../LOD1/Algorithm/morpho.o ../LOD1/Algorithm/PivBlb.o
OBJ2 = ../LOD1/exe/main.o
OBJ3 = ../LOD1/IO/bmp.o
all: final
final: ../LOD1/Algorithm/imageprocessing.o ../LOD1/Algorithm/morpho.o ../LOD1/Algorithm/PivBlb.o ../LOD1/exe/main.o ../LOD1/IO/bmp.o
$(CC) -o $@ $(OBJ1) $(OBJ2) $(OBJ3)
bmp.o: src/bmp.c inc/bmp.h
$(CC) $(CCFLAGS) -I$(HFLAG) -c src/bmp.c
clean:
rm -rf *o main.o
最佳答案
首先要检查的是文件 ../LOD1/Algorithm/imageprocessing.o
确实存在并且路径正确,因为 make 提示找不到它。
您自己在其他目录中运行 make 吗?如果没有,您应该添加类似的规则
../LOD1/Algorithm/imageprocessing.o:
$(make) -C ../LOD1/Algorithm imageprocessing.o
到你的主makefile。
此外,作为检查,您可以定义 last result列出 Make 找不到的东西的规则,例如
%::
-echo "Make can't find $$(pwd)$@!!!"
(这可能特定于 GNU make)
关于c - GCC 链接时间错误 - 没有规则可以制定目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2653066/