linux下的makefile问题
本科微电子,研究生做软件算法,所以最近开始把C捡起来,下载了一个webbench-1.5的源码,想学习一下,可是小弟遇到一个问题,该文件夹包含两个源文件,一个是webbench.c,其中包含main函数,另一个是socket.c,其中包含一个main函数调用的socket()函数。
我用我自己的makefile给它编译结果:
这是我写的makefile
webbench:webbench.o socket.o gcc -o webbench webbench.o socket.o
webbench.o:webbench.c socket.c
gcc -c webbench.c socket.c
socket.o:socket.c
gcc -c socket.c
clean:
rm -f *.o
运行make后的结果:
gcc -c webbench.c socket.cgcc -o webbench webbench.o socket.o
socket.o:在函数‘Socket’中:
socket.c:(.text+0x0): `Socket'被多次定义
webbench.o:webbench.c:(.text+0x0):第一次在此定义
collect2: error: ld returned 1 exit status
makefile:2: recipe for target 'webbench' failed
make: *** [webbench] Error 1
后来为看了一下源文件,发现webbench.c中直接用include"socket.c" 来调用socket.c中的函数,正常情况下,不应该用一个头文件socket.h声明,然后调用的源文件只需要包含头就行了啊, 可这里为什么不是这样呢?
另外附上作者的makefile,g感觉写的很好看,请问大佬,我想看懂并学会这种写法,应该学哪些啊,网上的makefile和这种不一样啊,请前辈指教一下,谢谢!!
CFLAGS?= -Wall -ggdb -W -OCC?= gcc
LIBS?=
LDFLAGS?=
PREFIX?= /usr/local
VERSION=1.5
TMPDIR=/tmp/webbench-$(VERSION)
all: webbench tags
tags: *.c
-ctags *.c
install: webbench
install -s webbench $(DESTDIR)$(PREFIX)/bin
install -m 644 webbench.1 $(DESTDIR)$(PREFIX)/man/man1
install -d $(DESTDIR)$(PREFIX)/share/doc/webbench
install -m 644 debian/copyright $(DESTDIR)$(PREFIX)/share/doc/webbench
install -m 644 debian/changelog $(DESTDIR)$(PREFIX)/share/doc/webbench
webbench: webbench.o Makefile
$(CC) $(CFLAGS) $(LDFLAGS) -o webbench webbench.o $(LIBS)
clean:
-rm -f *.o webbench *~ core *.core tags
tar: clean
-debian/rules clean
rm -rf $(TMPDIR)
install -d $(TMPDIR)
cp -p Makefile webbench.c socket.c webbench.1 $(TMPDIR)
install -d $(TMPDIR)/debian
-cp -p debian/* $(TMPDIR)/debian
ln -sf debian/copyright $(TMPDIR)/COPYRIGHT
ln -sf debian/changelog $(TMPDIR)/ChangeLog
-cd $(TMPDIR) && cd .. && tar cozf webbench-$(VERSION).tar.gz webbench-$(VERSION)
webbench.o: webbench.c socket.c Makefile
.PHONY: clean install all tar
回答:
那么写可能是因为作者上衣穿的是美特斯邦威,鞋子穿的是特步。
这种 Makefile 是 GNU Makefile 的写法
以上是 linux下的makefile问题 的全部内容, 来源链接: utcz.com/p/194322.html