LinuxSir.cn,穿越时空的Linuxsir!

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

关于GNU Makefile的一个小问题

[复制链接]
发表于 2005-10-14 12:30:03 | 显示全部楼层 |阅读模式

  1. TARGETS=a b c
  2. OBJS=$(patsubt %, %.o, $(TARGETS))
复制代码


如果用

  1. $(TARGETS) : $(OBJS)
  2.     $(CC) -o $(TARGETS) $(OBJS) -g
复制代码

的话,就会是
gcc -o a b c a.o b.o c.o -g

我需要的是
gcc -o a a.o
gcc -o b b.o
gcc -o c c.o

Makefile里应该怎么写? :thank
发表于 2005-10-14 12:52:05 | 显示全部楼层
$(TARGETS) : $(OBJS)
    $(CC) -o $@ $< -g

这里要用自动变量.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-15 11:19:31 | 显示全部楼层
多谢楼上的。我还发现一个出乎我意料的地方:

  1. $(SRCS)=$(wildcard *.c)
  2. $(OBJS)=$(patsubt %.c, %.o, $(SRCS))
  3. $(OBJS) : $(SRCS)
  4.          $(CC) -c $< $(CFLAGS)
复制代码

这样的话,就一直执行
gcc -c first.c -g这一句
如果换成

  1. $(OBJS) : $(SRCS)
  2.          $(CC) -c $< -o $@ $(CFLAGS)
复制代码

就是我想要的traversal compiling. 哪位兄台能解释一下?
回复 支持 反对

使用道具 举报

发表于 2005-10-15 18:30:12 | 显示全部楼层
Makefile里的rule里必须包含$@和($< | $^), 目标才会一条条的编译。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-17 14:53:05 | 显示全部楼层
Post by JBug
$(TARGETS) : $(OBJS)
    $(CC) -o $@ $< -g

这里要用自动变量.


用自动变量似乎不能满足我的要求啊。
比如

  1. TARGETS=a b
  2. OBJS=a.o b.o
  3. CXX=g++
  4. $(TARGETS): $(OBJS)
  5.     $(CXX) -o $@ $<
复制代码

执行的是
g++ -o a a.o
g++ -o b a.o

我需要的是:
g++ -o a a.o
g++ -o b b.o

这样的话Makefile应该怎么写?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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