免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2371 | 回复: 9
打印 上一主题 下一主题

[C] 呃..我要疯了...脑袋都要爆掉了..还在折腾... [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-02 18:35 |只看该作者 |倒序浏览
....
不要再劝咱用工具生成make了.....呵呵.. 一个简单的
有个C文件,文件名为 app1Main.c, 内容为

  1. #include <stdio.h>
  2. int main()
  3. {
  4.     return 0;
  5. }
复制代码
放在目录 ./makefile2/APP1/Source/ 下

准备把它生成的目标文件放在 ./makefile2/Objs/ 下.

makefile 写成如下形式:

  1. RSC1_PATH = ./makefile2/APP1/Source/
  2. OBJ_PATH = ./makefile2/Objs/

  3. vpath
  4. vpath %.c $(RSC1_PATH)
  5. vpath %.o $(OBJ_PATH)

  6. .PHONY : update
  7. update : $(OBJ_PATH)app1Main.o
  8.         @echo "target"
复制代码
经验证,这是不行的.. 提示 no rule to make target makefile2/objs/app1Main.o...
但如果在 ./makefile2/Objs/ 下面放个 app1Main.c 文件,就编译出了目标文件.

所以, 不懂..如果想要用隐含规则..而且这个目标还是带路径的... make 是怎么去搜索文件的? 难道不是先在make目录下查找,查找不到再到我设置的vpath中查找么?

再看下面一个..

  1. $(targetpath)target:
  2.     gcc -o $@ -c $<
复制代码
在这种情况下, 规则给出了目标和生成目标的命令...make还会去使用隐含规则么? 如果使用了, 为了每次编译都提示 gcc -c 后面no input 呢...


两天了...都要疯了....求大家能指点一下...实在是进行不下去了...

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
2 [报告]
发表于 2010-11-02 18:52 |只看该作者
给个源码包我试验下吧,我懒…………

论坛徽章:
0
3 [报告]
发表于 2010-11-02 18:53 |只看该作者
回复 1# HonryZZ

论坛徽章:
0
4 [报告]
发表于 2010-11-02 18:59 |只看该作者
回复 2# starwing83


   
看看 .rar文件...
我本来想用.c.o 这种规则同时生成 APP2 APP3...的..结果现在APP1都挂了...唉..

MAKEFILE2.rar (2.25 KB, 下载次数: 21)

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
5 [报告]
发表于 2010-11-02 19:19 |只看该作者
VC用得好好的,  非要去搞这套东西, 这不是自己给自己找不愉快吗……

论坛徽章:
0
6 [报告]
发表于 2010-11-02 19:25 |只看该作者
回复 5# OwnWaterloo


    ...  现在的项目用的是MinGW中的make来编译的,数以万计的文件...makefile都好几个...感觉不搞懂..难以下手... 所以才下定决心要搞懂这个的...呵呵....以前也没注意这些..只是这几天的事情....

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
7 [报告]
发表于 2010-11-02 19:28 |只看该作者
我的想法是这样的,默认的参数是 .c.o,换成GNU式写法就是 %.o : %.c,这里的%必须完全匹配。无论是文件名还是之前的路径,而因为你指定了全路径,这就导致了%匹配了全路径了。自然就无法找到.c文件了。我加了两行:

$(OBJ_PATH)%.o : $(RSC1_PATH)%.c
        @echo "here"

结果就正确了。

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
8 [报告]
发表于 2010-11-02 19:32 |只看该作者
回复 6# HonryZZ

被别人逼着用的?    那就没办法了。

如果是自学, 而且"hello world水平"不是自谦的话, 还是建议先用熟悉的工具去学语言。
别被折腾的工具挫败了学习的兴致。

论坛徽章:
0
9 [报告]
发表于 2010-11-02 21:23 |只看该作者
以前手写makefile都是把所有文件放在同一个目录

现在改用autoconf、automake了,就开始分了……

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
10 [报告]
发表于 2010-11-02 21:29 |只看该作者
以前手写makefile都是把所有文件放在同一个目录

现在改用autoconf、automake了,就开始分了……
lyreopera 发表于 2010-11-02 21:23



    基本上只用cmake
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP