Chinaunix

标题: ubuntu8.10 makefile中宏定义的引用 [打印本页]

作者: lilyshuai    时间: 2009-05-06 15:44
标题: ubuntu8.10 makefile中宏定义的引用
刚开始学习写makefile文件,遇到了下面问题,请高手指教,不胜感激!
源代码如下:
  1 all: myapp
  2         CC = gcc
  3         INCLUDE = .
  4         CFLAGS = -g -Wall -ansi
  5 myapp: main.o 2.o 3.o
  6         $CC -o myapp main.o 2.o 3.o
  7 main.o : main.c a.h
  8         $(CC) -I$(INCLUDE) $(CFLAGS) -c main.c
  9 2.0: 2.c a.h b.h
10         $(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c
11 3.0: 3.c b.h c.h
12         $(CC) -I$(INLCUDE) $(CFLAGS) -c 3.c
命令:make -f makefile2 | tee -a err.txt得到如下信息:
cc -I  -c main.c
/tmp/cc4yaYqr.o: In function `main':
main.c.text+0x12): undefined reference to `function_two'
main.c.text+0x17): undefined reference to `function_three'
collect2: ld 返回 1
make: *** [main.o] 错误 1

为什么宏定义没有引用?不明白
作者: linternt    时间: 2009-05-06 15:59
function_two
function_three

你这两个函数在哪定义的, 编译的时候包含这个定义函数的文件了吗?
作者: lilyshuai    时间: 2009-05-06 16:37
在这段代码中,a.h b.h c.h都是空的,而2.c 中定义的是function_two, 3.c中定义了function_three
作者: bsdc    时间: 2009-05-06 18:11
原帖由 lilyshuai 于 2009-5-6 15:44 发表
刚开始学习写makefile文件,遇到了下面问题,请高手指教,不胜感激!
源代码如下:
  1 all: myapp
  2         CC = gcc
  3         INCLUDE = .
  4         CFLAGS = -g -Wall -ansi
  5 myapp: main ...

链接错误啊,makefile 写错了
第九行看起来是2.0啊,上面确实2.o,改成2.o还有下面11行的3.o
作者: lilyshuai    时间: 2009-05-06 21:43
谢谢各位!除此之外还有一个问题,2。3,4行对宏的定义应该是顶格写的。
作者: gawk    时间: 2009-05-06 21:50
-I/xxx/yyy
/xxx/yyy 存放你定义的头文件的目录
作者: dreamice    时间: 2009-05-06 22:15
2         CC = gcc
  3         INCLUDE = .
  4         CFLAGS = -g -Wall -ansi
这个写到前面,不要tab,这个相当于定义




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2