为makefile定义用于创建共享库的规则

时间:2018-01-23 13:29:44

标签: makefile java-native-interface

我目前正在开发一个JNI项目,其中C部分使用我的NanoPi上的本地库。构造头,在C中实现它并测试包装器工作正常。现在我尝试向我的make文件添加共享库支持,但我无法运行它。不幸的是,我是Makefiles的新手,到目前为止找不到一个教程,详细解释了我的所有需求,所以我可以自己解决。

下面你可以找到我目前构建的Makefile,它用于测试实现。

DYN_VERS_MAJ=2
DYN_VERS_MIN=0
VERSION=$(DYN_VERS_MAJ).$(DYN_VERS_MIN)

DEBUG   = -O3
CC  = gcc
INCLUDE = -I/usr/local/include -I/usr/lib/jvm/java-1.8.0-openjdk-
armhf/include -I/usr/lib/jvm/java-1.8.0-openjdk-armhf/include/linux
CFLAGS  = $(DEBUG) -Wall $(INCLUDE) -Winline -pipe -fPIC -Wformat=2 

LDFLAGS = -L/usr/local/lib 
LDLIBS  = -lwiringPi -lwiringPiDev -lpthread -lm -lwiringPiPca9685

SRC = pwm_native_PCA9685Native.c
DYNAMIC=libPca9685Native.so.$(VERSION)
OBJ = $(SRC:.c=.o)

BINS =$(SRC:.c=)

all:    $(DYNAMIC)
$(Dynamic): $(OBJ)
        @echo "[Link (Dynamic)]" 
        @$(CC) -shared -Wl,-soname,libPca9685Native.so -o libPca9685Native.so.$(VERSION) -lpthread $(OBJ)

driver: pwm_native_PCA9685Native.o
        @echo [link]
        @$(CC) -o $@ pwm_native_PCA9685Native.o $(LDFLAGS) $(LDLIBS)
.c.o:
        @echo [Compile] $<
        @$(CC) -c $(CFLAGS) $< -o $@
clean:
        @echo "[Clean]"
        @rm -f $(OBJ) *~ core tags $(BINS)
tags:   $(SRC)
        @echo[ctags]
        @ctags $(SRC)
depend: 
        makedepend -Y $(SRC)

(动态)部分是新添加的部分。我一直试着跑,我得到了消息     make:没有规则要制作目标'libPca9685Native.so.2.0',所有人都需要。 输出对我来说很清楚。创建so文件时缺少规则,但我不知道如何添加该规则... 帮助将非常感激。 关心彼得

1 个答案:

答案 0 :(得分:2)

下面:

all:    $(DYNAMIC)
$(Dynamic): $(OBJ)

Makefile变量区分大小写(即使在Windows上使用MinGW gnu make)。因此,您必须尊重外壳$(Dynamic)未正确评估。修正:

all:    $(DYNAMIC)
$(DYNAMIC): $(OBJ)

(makefile中可能还有其他问题,请注意)