一同事写的makefile 看不懂。。。

zhuran 发布于 2013/09/04 23:17
阅读 600
收藏 0

今天维护程序,看到一同事写的makefile调用动态库,没看明白,和教课书上的想去甚远。不韶了,先上代码。

1.库的makefile

CCOMPILE =   arm-linux-gcc
CPPCOMPILE =   arm-linux-g++
COMPILEOPTION = -c -g
INCLUDEDIR =     
LINK =   arm-linux-gcc
LINKOPTION = -g -o rfd_102
 OBJS =rfd_102.o
OUTPUT = rfd_102
$(OUTPUT): $(OBJS) $(APPENDLIB)
    $(LINK) $(LINKOPTION)  -shared -fpic  $(OBJS)
...

2. main的makefile

将上面生成rfd_102拷贝到main的文件夹下,再makefile

CCOMPILE = arm-linux-gcc
CPPCOMPILE = arm-linux-g++
COMPILEOPTION = -c -g
INCLUDEDIR =     
LINK = arm-linux-gcc
LINKOPTION = -g -o rfd_comm
LIBDIRS =
OBJS = rfd.o
OUTPUT = rfd_comm
SHAREDLIB =  
APPENDLIB = ./rfd_102  
$(OUTPUT): $(OBJS) $(APPENDLIB)
    $(LINK)  $(LINKOPTION) $(LIBDIRS) $(OBJS) $(SHAREDLIB) $(APPENDLIB)
。。。

使用方式是:将rfd_comm和rfd_102都下装到usr/local路径下,我试了一下,执行rfd_comm,在运行时可以调用rfd_102里面的函数,rfd_102也可以调用rfd_comm里面的函数 。

这看的我一头雾水啊。动态库的文件不是要加后缀.so吗 不是要下到lib路径下吗 还有APPENDLIB = ./rfd_102 这是什么意思啊为什么要./   ,这个有什么用,去掉rfd_comm是运行不起来的,会报警找不到rfd_102的函数。


加载中
0
zhuran
zhuran
老规矩,自己的帖子自己先占沙发。
0
中山野鬼
中山野鬼
贴了一半,看不出个所以然。哈。
0
zhuran
zhuran

下面是

clean:
    rm -f $(OBJS)
    rm -f $(OUTPUT)
all: clean $(OUTPUT)
.PRECIOUS:%.cpp %.c %.C
.SUFFIXES:
.SUFFIXES:  .c .o .cpp .ecpp .pc .ec .C .cc .cxx
 
.cc.o:
    $(CCOMPILE) -c -o $*.o $(COMPILEOPTION) $(INCLUDEDIR)  $*.cx
 
.c.o:
    $(CCOMPILE) -c -o $*.o $(COMPILEOPTION) $(INCLUDEDIR) $*.c

我想这个没什么好贴的 重点在上面

0
中山野鬼
中山野鬼

我自己看错了。哈。。

加后缀是为了方便一些默认操作而已。文件名和它做什么没什么关系。哈。

0
zhuran
zhuran
那请问 APPENDLIB = ./rfd_102 的 ./是什么作用啊  
Ley
Ley
回复 @zhuran : 我是看你描述中说,把生成的库文件rfd_102拷到了main文件夹,然后make的,那./rfd_102这句应该就是把这个生成的rfd_102链接到程序中。
zhuran
zhuran
回复 @ley : 我尝试过把./去掉,编译是能过的,但运行时报找不到rfd_102里面的函数。确定这个是当前路径下的意思吗?
Ley
Ley
./ 表示的当前路径下
返回顶部
顶部