免费注册 查看新帖 |

Chinaunix

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

问一个 makefile的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-29 09:34 |只看该作者 |倒序浏览
  1. OUT_DIR         = .
  2. OBJ_DIR         = ./obj

  3. #DEFINE_FLAG    = -DDEBUG
  4. #CCFLAG         =  -Wall $(OPTI_FLAG) $(DEFINE_FLAG)
  5. CCFLAG          += -c

  6. #LDFLAG         = -O1 -lpthread

  7. GCC             = gcc

  8. CC              = $(GCC) $(CCFLAG)
  9. LD              = $(GCC) $(LDFLAG)
  10. #AR             = ar rvs


  11. ALL_OBJS        =$(OBJ_DIR)/test.o

  12. all: $(OUT_DIR)/test.out
  13.         size $(OUT_DIR)/test.out


  14. $(OBJ_DIR)/test.o: $(OUT_DIR)/test.c
  15.         $(CC) -o $@ $<  
  16.         
  17. ### link all obj files
  18. $(OUT_DIR)/test.out: $(ALL_OBJS)  makefile
  19.           rm -f $(OUT_DIR)/test.out
  20.         $(LD) -o $(OUT_DIR)/test.out $(ALL_OBJS)


  21. clean:
  22.         rm -f $(OUT_DIR)/*.out
  23.         rm -f $(OBJ_DIR)/*.o
复制代码
make的时候出现的错误:
gcc -c  -o /test.o test.c  
Assembler messages:
Fatal error: can't create /test.o: Permission denied
make: *** [/test.o] Error

请问这个是怎么回事,有人知道吗,谢谢!

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2010-06-29 09:43 |只看该作者
Fatal error: can't create /test.o: Permission denied

初步看起来是创建文件权限的问题。你是以什么用户编译程序的,能否有权限在根目录创建文件。

论坛徽章:
0
3 [报告]
发表于 2010-06-29 09:43 |只看该作者
这是由于你在创建的目录里面权限不够的原因,permission denied--允许拒绝

论坛徽章:
0
4 [报告]
发表于 2010-06-29 09:48 |只看该作者
本帖最后由 fengkongxue 于 2010-06-29 09:50 编辑

1. OUT_DIR         = 绝对路径
   2. OBJ_DIR         = ./obj
   3.

   4. #DEFINE_FLAG    = -DDEBUG
   5. #CCFLAG         =  -Wall $(OPTI_FLAG) $(DEFINE_FLAG)
   6. CCFLAG          += -c
   7.

   8. #LDFLAG         = -O1 -lpthread
   9.

  10. GCC             = gcc
  11.

  12. CC              = $(GCC) $(CCFLAG)
  13. LD              = $(GCC) $(LDFLAG)
  14. #AR             = ar rvs
  15.

  16.


  17. ALL_OBJS        =test.o
  18.

  19. all: test.out
  20.         size test.out
  21.

  22.


  23. .o:.c
  24.         $(CC) -o $@ $<  
  25.         
  26. ### link all obj files
  27. test.out: $(ALL_OBJS)  makefile
  28.           rm -f test.out
  29.         $(LD) -o test.out $(ALL_OBJS)
  30.

  31.


  32. clean:
  33.         rm -f $(OUT_DIR)/*.out
  34.         rm -f $(OBJ_DIR)/*.o

这样试试,不行再说

论坛徽章:
0
5 [报告]
发表于 2010-06-29 09:52 |只看该作者
OUT_DIR    是当前路径,有个点
OBJ_DIR   是当前路径下的./obj ,按道理讲不会出现绝对路径的问题。
我如果把所有的OBJ_DIR 换成OUT_DIR就没问题了。

论坛徽章:
0
6 [报告]
发表于 2010-06-29 09:53 |只看该作者
gcc -c  -o /test.o test.c  看见没有,这个是在根目录里创建 test.o,如果没有足够权限是不行的

论坛徽章:
0
7 [报告]
发表于 2010-06-29 09:58 |只看该作者
一般来说都是把makefile放在源代码目录中,所以规则 .o:.c makefile会自己识别的,不用加路径了,其他的不变,你先试试把规则变成.o:.c

论坛徽章:
0
8 [报告]
发表于 2010-06-29 10:01 |只看该作者
如果要想把生成的.o放在指定目录里,你先试试把路径变为绝对路径,可以的话就是这个问题了

论坛徽章:
0
9 [报告]
发表于 2010-06-29 10:08 |只看该作者
如果要想把生成的.o放在指定目录里,你先试试把路径变为绝对路径,可以的话就是这个问题了
fengkongxue 发表于 2010-06-29 10:01



   多谢回答。找到问题了。
OBJ_DIR = ./obj 后面不能有空格。把多余的空格字符去掉就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP