帮忙解释下下面的makefile,谢谢

LIBS:=libvtss_switch.soLIBO:=vtss_switch.ovtss_switch_ext.oPROG:=portmonportcfgvlancf... LIBS := libvtss_switch.so
LIBO := vtss_switch.o vtss_switch_ext.o
PROG := portmon portcfg vlancfg inject
all: $(LIBS) $(PROG)
$(LIBO): CFLAGS += -fPIC
libvtss_switch.so: $(LIBO)
$(CC) -shared -o $@ $^
$(PROG): %: %.c $(LIBS)
$(CC) -Wall $(CFLAGS) $@.c -o $@ $(LIBS)
这句是什么意思$(LIBO): CFLAGS += -fPIC, 为什么依赖文件是CFLAGS += -fPIC
$(CC) -shared -o 这样可以生成动态库?
$(CC) -Wall $(CFLAGS) $@.c -o $@ $(LIBS) 包含库的时候为什么不用 -l$(LIBS)
对makefile理解不是很深入,帮忙解释下,谢谢
展开
 我来答
匿名用户
2013-01-07
展开全部
这句是什么意思$(LIBO): CFLAGS += -fPIC, 为什么依赖文件是CFLAGS += -fPIC
不是跟在目标后面的就一定是依赖文件,这里是表示目标变量。就是在执行$(LIBO)目标时,把CFLAGS这个变量增加赋值 -fPIC

$(CC) -shared -o 这样可以生成动态库?
可以的,这个是标准语法,详见man gcc

$(CC) -Wall $(CFLAGS) $@.c -o $@ $(LIBS) 包含库的时候为什么不用 -l$(LIBS)
这种做法不规范,直接把库文件当做目标文件链接,但是也可以这么干。正规的使用-l的话,那也不是-l$(LIBS),应该是-lvtss_switch,并且要指定库路径-L./,动态库的引用命名是有规范的,前面的lib和后缀so都是要省略的。

你的疑问不仅仅是makefile语法,还涉及到编译和链接的语法,好好去看看英文文档吧。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式