找回密码
 注册
查看: 758|回复: 3

关于makefile的问题

[复制链接]
发表于 2005-9-20 18:42:06 | 显示全部楼层 |阅读模式
gy.c-->ctest/mk/gy/gy.c
gb.c-->ctest/mk/gb/gb.c
这是两个子函数的位置。
mk中的makefile如下:
vpath %.c gb:gy
objects=gy.o gb.o
all:$(objects)
$(objects):%.o:%.c
        $(CC) -c  $< -o $@
.PHONY:clean
-clean:
        rm $(objects)
在ctest底下有主函数sy.c(main函数并且调用gb,gy)的makefile如下
#makefile
include mk/makefile
vpath %.c mk/gb:mk/gy
shiyan:sy.o gy.o gb.o
        cc -o shiyan sy.o gy.o gb.o
.PHONY:clean
-clean:
        rm %.o
我原意是通过mk底下的makefile生成gy.o gb.o,ctest底下的makefile生成sy.o,再将三个目标文件gy.o,gb.o,sy.o链接成可执行文件shiyan,可是就是得不到shiyan,三个目标文件都能被生成,呵呵~刚学makefile不久,许多地方还是不太熟悉,还请哪位高人指点一下,谢了``
发表于 2005-9-21 09:14:12 | 显示全部楼层
把mk/makefile中的all:$(objects)
换成
all:shiyan

试试
回复

使用道具 举报

 楼主| 发表于 2005-9-21 16:26:47 | 显示全部楼层
kakuyou斑竹~谢谢你!按照你提供的方法能生成可执行文件shiyan。
但是为什么这样一改就可以了 呢 ..?
还有makefile中的包含,如:include mk/makefile,它具体是怎么实现的啊? 是不是就是简单的替代..在编译时将mk/makefile展开到出现include的地方啊?
回复

使用道具 举报

 楼主| 发表于 2005-9-21 17:37:03 | 显示全部楼层
如果现在gb.o,gy.o,sy.o,shiyan都可以正常生成了,我想在makefile中编写一段小代码,它的作用是判断当前目录中有没有haha这个目录,有的话复制gb.o,gy.o,sy.o到该文件夹中,没有的话创建它,再复制过去,下面是我的makefile,您看看是哪里出现了问题:
#makefile
vpath %.c mk/gb:mk/gy
shiyan:sy.o gy.o gb.o
        cc -o shiyan sy.o gy.o gb.o
        if [ -f haha ];        then        mv *.o haha/ ; \
else        mkdir haha;mv *.o haha/; fi
.PHONY:clean
clean:
        rm *.o shiyan;
编译时错误如下:
[zhangqing@localhost ctest]$ make
cc    -c -o sy.o sy.c
cc    -c -o gy.o mk/gy/gy.c
cc    -c -o gb.o mk/gb/gb.c
cc -o shiyan sy.o gy.o gb.o
if [ -f haha ]; then    mv *.o haha/ ; \
else    mkdir haha;mv *.o haha/;  fi
/bin/sh: -c: line 2: syntax error: unexpected end of file
make: *** [shiyan] Error 2
这是什么原因啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-7 21:03 , Processed in 0.042957 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表