【发布时间】:2010-04-16 12:57:03
【问题描述】:
我是 Makefile 写作领域的新手。我有一个想要使用 GCC 构建的 C 项目,我可以编写一个相当不错的 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
【问题讨论】:
-
"No rule to make target" 是
make错误,而不是链接器错误。这意味着它找不到该目标文件(它被列为调用链接器的规则的依赖项),并且它无法弄清楚如何创建它。您需要向我们展示应该创建该目标文件的 Makefile 的内容。