如何在makefile

时间:2018-03-09 12:06:20

标签: c linux makefile

我需要为我的项目创建一个makefile,我有两个相互依赖的库,分别是libpcsc.so和libccid.so。

有人可以告诉我我的错误是什么吗?提前感谢您的回答。

请在需要更多信息时告诉我。

我的makefile就像:

<顺便说一下,lib目录之一是/home/hasanbucak/Desktop/pcsc-lite-1.8.23/src/.libs/,其他的是usr / lib / pcsc / drivers / ifd-ccid.bundle /内容/ Linux的/

 CC = gcc

 LIB_DIRS = -L/home/hasanbucak/Desktop/pcsc-lite-1.8.23/src/.libs/ 
 -L../../usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/ 

 INCLUDE_DIR = /home/hasanbucak/Desktop/ccid-1.4.28/src/ #ccid_usb.h

 CFLAGS = -g -Wall

obj-y:= smcard

default: all


all: smcard

smcard: 
    $(CC) $(CFLAGS) $(LIB_DIRS)  -I$(INCLUDE_DIR) -c -o $(obj-y).o $(obj-y).c
    $(CC) $(CFLAGS) -lccid -lpcsclite  $(LIB_DIRS) -I$(INCLUDE_DIR) -o $(obj-y) $(obj-y).c  




clean:
    rm $(obj-y).o $(obj-y)

当我在终端写make时,它说:

hasanbucak@ubuntu:~/Desktop/hasan$ make
gcc -g -Wall -L/home/hasanbucak/Desktop/pcsc-lite-1.8.23/src/.libs/ -L../../usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/   -I/home/hasanbucak/Desktop/ccid-1.4.28/src/ -c -o smcard.o smcard.c
gcc -g -Wall -lccid -lpcsclite  -L/home/hasanbucak/Desktop/pcsc-lite-1.8.23/src/.libs/ -L../../usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/  -I/home/hasanbucak/Desktop/ccid-1.4.28/src/ -o smcard smcard.c  
/usr/bin/ld: cannot find -lccid
collect2: error: ld returned 1 exit status
Makefile:20: recipe for target 'smcard' failed
make: *** [smcard] Error 1

1 个答案:

答案 0 :(得分:2)

Make已告诉你Makefile有什么问题:

/usr/bin/ld: cannot find -lccid

您应该正确指定ccid的路径:

LIB_DIRS = -L/home/hasanbucak/Desktop/pcsc-lite-1.8.23/src/.libs/ 
  -L/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/

请注意,/usr../../usr根本不在同一个目录中。

第一个是绝对的(即相对于你的根目录),而第二个是相对的,它扩展为~/Desktop/hasan/../../usr,相当于/home/hasanbucak/usr