帮忙看看makefile 中关于变量的条件赋值 的问题吧?不搞定我下周就死了

debug release :myprog
debug :=CFLAGS=-g
release :=CFLAGS=-O
OBJECTS=myprog.o myfunc.o

myprog:$(OBJECTS)
$(LINK.c) -o $@ @(OBJECTS)
myprog.o:myprog.c myprog.h
$(COMPILE.c) myprog.c
myfunc.o:myfunc.c myprog.h
$(COMPILE.c) myfunc.c

我想达到的目的是 运行make debug 则得到的目标文件有调试信息而不优化,而 运行 make release 则优化而不产生调试信息。可是我的SCO UNIX 5.05总提示我出错。唉,郁闷啊!
另外 在SCO UNIX 的make 中是不是没有缺省变量LINK.c 和COMPILE.c?我想知道我的make 有哪些缺省变量(即宏),通过什么命令查呢?make -p 显示的那些变量是不是所有的?

---------------------------------------------------------------

我以前在Solaris下的程序的makefile就想你写的一样,
可以make release或make debug。但好象有些系统的
make不支持target := variable =value这样的语句。
gmake好象都不支持。至少我在Windows下用gmake 3.79.1
不支持。
---------------------------------------------------------------

采用这样的方式,使用3个文件
makefile debug.mk release.mk
你执行
make debug
make release
进行调试和发行版编译

#makefile
debug :
$(MAKE) -f ./debug.mk

release:
$(MAKE) -f ./release.mk

#debug.mk
CFLAGS := -g

main: main.o test.o
gcc $(CFLAGS) -o main main.o test.o

main.o: main.c test.h
gcc $(CFLAGS) -c main.c

test.o: test.c test.h
gcc $(CFLAGS) -c test.c

#release.mk
CFLAGS := -O

main: main.o test.o
gcc $(CFLAGS) -o main main.o test.o

main.o: main.c test.h
gcc $(CFLAGS) -c main.c

test.o: test.c test.h
gcc $(CFLAGS) -c test.c

---------------------------------------------------------------

cc -D DEBUG ...
在程序中可以这样定义
#if DEBUG
...
#endif

Published At
Categories with 服务器类
Tagged with
comments powered by Disqus