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.c

gcc -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 -O

CC?= 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

回到顶部