免费注册 查看新帖 |

Chinaunix

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

[其他] MAKEFILE的小问题,谢谢大家解惑下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-25 10:05 |只看该作者 |倒序浏览
最近小弟在学MAKE FILE,但是想INCLUDE一个头文件的时候,怎么也不能成功,请指教

INCDIR        := $(PROJECT_ROOT)/include

CLFAGS += -I$(INCDIR)

all: esw.o
        $(cc)  -c -g -I$(INCDIR)  esw.c
编译的时候总是出现
esw.c:2:15: 1.h: No such file or directory

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
2 [报告]
发表于 2013-08-25 13:45 |只看该作者
源码有目录的话, esw.o也要带上目录,这样makefile才能正确推导。

论坛徽章:
0
3 [报告]
发表于 2013-08-25 15:00 |只看该作者
是的,你这个makefile默认esw.c是在当前目录。如果在其它目录,就要修改下。

论坛徽章:
1
申猴
日期:2013-09-09 10:22:56
4 [报告]
发表于 2013-08-26 08:38 |只看该作者
是没有找到1.h头文件吧, makefile写的不对,all的依赖文件是esw.o,但是没有给出esw.o是如何生成的

-g选项应该加在CFLAGS中,-I选项不应该放在CFLAGS里面

all: esw
esw: esw.c 1.h
     $(cc) $(CFLAGS) -I$(INCDIR) -o esw

当然也可以分两部,先生成esw.o,再生成可执行文件esw

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
5 [报告]
发表于 2013-08-26 08:57 |只看该作者
kaman7582 发表于 2013-08-25 10:05
最近小弟在学MAKE FILE,但是想INCLUDE一个头文件的时候,怎么也不能成功,请指教

INCDIR        := $(PROJECT_ROOT)/include

CLFAGS += -I$(INCDIR)

all: esw.o
        $(cc)  -c -g -I$(INCDIR)  esw.c
编译的时候总是出现
esw.c:2:15: 1.h: No such file or directory

上面的回复即使可以达到你的效果也都是错误的或者理解不正确的。我认为正确的解释是你把 CFLAGS 写成 CLFAGS 了。如果没有显式指定如何生成.o文件的话,make 会自动使用 CPPFLAGS 和 CFLAGS 里的参数来从对应的.c文件生成.o文件。-I选项惯例上多设置在CPPFLAGS 中,因为它是预编译选项,但是也有很多人把它指定在CFLAGS中,其实这个指定在哪里都没有本质区别,make只是把这两个变量里的值原样地传给gcc而已。

论坛徽章:
0
6 [报告]
发表于 2013-08-26 11:35 |只看该作者
本帖最后由 2007robot 于 2013-08-26 11:37 编辑

问题应该不在这,是LZ没有正确引用头文件导致的,错误提示很明显啊!

Monox 发表于 2013-08-26 08:57
上面的回复即使可以达到你的效果也都是错误的或者理解不正确的。我认为正确的解释是你把 CFLAGS 写成 CLF ...

论坛徽章:
7
巳蛇
日期:2014-04-10 08:54:57白羊座
日期:2014-04-22 20:06:262015年亚洲杯之沙特阿拉伯
日期:2015-02-10 14:18:532015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之吉达阿赫利
日期:2015-06-02 11:34:112015亚冠之武里南联
日期:2015-06-24 12:13:082015亚冠之阿尔纳斯尔
日期:2015-08-03 09:08:25
7 [报告]
发表于 2013-08-26 12:15 |只看该作者
本帖最后由 Monox 于 2013-08-26 12:30 编辑

回复 6# 2007robot


    错误提示是很明显,但是我没仔细看一下楼主的Makefile当时只是扫了一眼没看all 之后的内容就直接看错误输出了,而且看了楼上的回复还以为楼主是要生成 esw 可执行文件,以为那唯一的一条target 是esw:,然后没有写esw.o的生成规则,结果原来他只想生成 esw.o 文件就可以了,所以楼主的问题出在头文件1.h不在它指定的那个 $(INCDIR)里,上面粗心的回复很抱歉。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP