免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: liu1061
打印 上一主题 下一主题

关于makefile中对头文件依赖的问题? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2011-03-31 08:44 |只看该作者
可以使用编译器的-M选项生成头文件依赖

论坛徽章:
0
12 [报告]
发表于 2011-04-01 00:04 |只看该作者
本帖最后由 liu1061 于 2011-04-01 00:06 编辑

为什么我加了-MM后,反到make的时候到有错呢!
我测试用的makefile.
CC    := gcc
CFLAGS := -Wall -g
SOURCE := $(wildcard *.c)
OBJECTS : = $(SOURCE:%.c:%.o)

$(TARGET) : $(OBJECTS)
       $(CC) $(CFLAGS) -o $@ $^

%.o : %.c
      $(CC) $(CFLAGS) -o $@ -c -MM $<

.PHONY : clean test
clean :
      -rm $(OBJECTS) $(TARGET)
test :
      @echo $(SOURCE)
      @echo $(OBJECTS)

下面是测试结果图!


不知道是不是我理解和做法问题希望朋友们指点一下!drangon & 皇家救星, 能给点意见吗?用过drangon的方法也不能通过!也不知道为什么!

论坛徽章:
0
13 [报告]
发表于 2011-04-01 18:24 |只看该作者
了解的朋友给支持一下!谢谢哦!

论坛徽章:
0
14 [报告]
发表于 2011-04-01 19:29 |只看该作者

  1. # My simple makefile
  2. #

  3. CC = gcc

  4. BIN_PROGRAM = xxx

  5. SOURCE_DIR = $(shell pwd)
  6. INCLUDE_DIR = $(SOURCE_DIR)/include

  7. SOURCE_FILES = $(wildcard *.c)
  8. OBJ_FILES = $(patsubst %.c, %.o, $(SOURCE_FILES))
  9. DEPEND_FILES = $(patsubst %.c, %.d, $(SOURCE_FILES))

  10. CFLAGS = -Wall -I$(INCLUDE_DIR)

  11. all: $(BIN_PROGRAM)

  12. %.o:%.c
  13.     $(CC) $(CFLAGS) -c $< -o $@

  14. %.d:%.c
  15.     @set -e; rm -f $@; \
  16.     $(CC) $(CFLAGS) -MM  $< > $@.$$; \
  17.     sed 's,\($*\)\.o[:]*,\1.o $@: ,g' $@.$$ > $@; \
  18.     rm -f $@.$$

  19. sinclude $(DEPEND_FILES)

  20. $(BIN_PROGRAM): $(OBJ_FILES)
  21.     $(CC) $(CFLAGS) $^ -o $@

  22. clean:
  23.     rm -f $(BIN_PROGRAM) $(OBJ_FILES) $(DEPEND_FILES) $(DEPEND_FILES).*
复制代码
试一试我的

论坛徽章:
0
15 [报告]
发表于 2011-04-01 20:40 |只看该作者
回复 14# whaaat


    %.d:%.c

    @set -e; rm -f $@; \

    $(CC) $(CFLAGS) -MM  $< > $@.$$; \

    sed 's,\($*\)\.o[:]*,\1.o $@: ,g' $@.$$ > $@; \

    rm -f $@.$$

这段有什么作用吗,看起来有点麻烦哦,还用到了sed! 呵呵,我试试!

论坛徽章:
0
16 [报告]
发表于 2011-04-01 20:42 |只看该作者
回复 15# liu1061
改变—MM结果,增加.d文件的依赖

论坛徽章:
0
17 [报告]
发表于 2011-04-01 20:54 |只看该作者
回复 16# whaaat


    我刚才试了,可以通过,运行结果也是OK的!但是我改动其include的头文件后,在次make时,总是提示:
Nothing to be done for `all'!

不知道为什么,明明头文件有改动,但是make的时候动却不能反应出来!

论坛徽章:
0
18 [报告]
发表于 2011-04-01 21:18 |只看该作者
回复 17# liu1061
应该会重新编译啊,你再检查检查

论坛徽章:
0
19 [报告]
发表于 2011-04-01 21:51 |只看该作者
还是不行! 试过N多次了!

论坛徽章:
0
20 [报告]
发表于 2011-04-04 16:06 |只看该作者
不推荐使用gcc -M, 会弄出一大堆文件.
简单的用Makefile写, 甚至还可以在makefile里写shell.
麻烦的用CMake, scons, bjam等更好的工具吧.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP