当前位置: 技术问答>linux和unix
帮忙解释下下面的makefile,谢谢
来源: 互联网 发布时间:2017-04-03
本文导语: 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 ...
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理解不是很深入,帮忙解释下,谢谢
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理解不是很深入,帮忙解释下,谢谢
|
$(CC) -shared -o 这样可以生成动态库?
是的
|
这句是什么意思$(LIBO): += -fPIC, 为什么依赖文件是CFLAGS += -fPIC
LIBO所依赖的编译选项CFLAGS 有-fPIC。
-fPIC
表示产生与位置无关的代码
LIBO所依赖的编译选项CFLAGS 有-fPIC。
-fPIC
表示产生与位置无关的代码
|
The linker searches a standard list of directories for the library, which is actually a file named liblibrary.a. The linker then uses this file as if it had been specified precisely by name.
所以用-l的话,就是-lvtss_switch
不是-llibvtss_switch.so
所以用-l的话,就是-lvtss_switch
不是-llibvtss_switch.so
|
问题1, 见2楼。
问题2,你需要学习下Makefile的规则,$@是目标文件,这个不是链接动态库(不需要-l),而是要生成动态库.
问题2,你需要学习下Makefile的规则,$@是目标文件,这个不是链接动态库(不需要-l),而是要生成动态库.