c - linux下的makefile问题

查看:89
本文介绍了c - 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 的写法

这篇关于c - linux下的makefile问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆