LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 668|回复: 3

关于Makefile的一个问题

[复制链接]
发表于 2004-9-21 11:01:41 | 显示全部楼层 |阅读模式
呵呵,还是我,前些天也问过一个关于Makefile的问题,经过这些天,我对Makefile也算有点了解了。呵呵

对于对Makefile比较熟悉的人可能就不是什么问题了,多谢了:
假如我现在有三个程序main.for,sub1.for,sub2.for ,其中,main.for调用sub1.for,sub2.for
如果这三个程序仅仅只在一个目录下可能问题就比较简单,我现在希望能把sub1.for,sub2.for放到当前目录下的inclds文件夹中,在编译的时候如果把.o文件放到当前目录下问题似乎也比较简单,这一步我能做到(问题是我实际问题中inclds文件夹中的文件比较多,至少有几百个吧,所以不希望生成的.o文件出现在当前目录,生成的.o文件仅出现在inclds子目录中)

我现在想做的事情是:Makefile文件和main.for文件在当前目录,最终生成的可执行文件main在当前目录。当中编译过程中产生的sub1.o,sub2.o文件都在inclds文件夹中。不希望用mv命令移动sub1.o,sub2.o文件到inclds文件夹,因为这样每次修改后都要重新编译。

我写了几个个Makefile文件,感觉比较正确一点一个是:
main: main.o inclds/sub1.o inclds/sub2.o
        f77 -o main main.o inclds/sub1.o inclds/sub2.o
main.o: main.for
        f77 -O -c main.for
inclds/sub1.o:inclds/sub1.for
        f77 -O -c  inclds/sub1.for
inclds/sub2.o:inclds/sub2.for
         f77 -O -c  inclds/sub2.for

出错信息是:
f77 -O -c  inclds/sub1.for
f77 -O -c  inclds/sub2.for
f77 -o main main.o inclds/sub1.o inclds/sub2.o
f77: inclds/sub1.o: 没有那个文件或目录
f77: inclds/sub2.o: 没有那个文件或目录
make: *** [main] Error 1

这个错误的原因应该是在联接的时候找不到inclds文件夹中的.o文件,也就是说生成的.o文件没有在inclds文件夹中,我查看了一下,确实.o文件仍然在当前目录下。我尝试了其它的修改目录的办法还是不行。黔驴技穷了!

:help :help :thank
 楼主| 发表于 2004-9-21 12:24:18 | 显示全部楼层
我的问题简单说就是:
如何在当前目录下写一个Makefile文件中的一句话,在编译过程中把当前目录下的子文件夹中的文件编译成.o文件,并放在子文件夹中,而不是放在当前文件夹下。

:help :help
发表于 2004-9-22 14:20:18 | 显示全部楼层
f77 -O -c inclds/sub1.for 改成

f77 -O -c inclds/sub1.for -o inclds/sub1.o   或者

f77 -O -c inclds/sub1.for -o $@    试试看?
 楼主| 发表于 2004-9-24 16:03:23 | 显示全部楼层
ok了,多谢!
:thank :thank :thank :thank :thank
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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