make:***没有规则来制作`libmy.so'所需的目标`gcc'.停止

Elf*_*yer 0 c makefile shared-libraries

我想将.c文件编译为.so(共享库).我不明白为什么,我有makefile让我出错:

LIB = libmy.so

SRC =   lib.c

CC = gcc

OBJ = $(CC) -c -fPIC $(SRC)

all: $(LIB)

re: fclean all

$(LIB): $(OBJ)
        $(CC) -shared -fPIC $(OBJ) -o $(LIB)

clean:
        $(RM) $(OBJ)

fclean: clean
        $(RM) $(LIB)
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

Aus*_*ips 5

问题出在以下几行:

$(LIB): $(OBJ)
Run Code Online (Sandbox Code Playgroud)

扩展后,这将成为:

libmy.so : gcc -c -fPIC lib.c
Run Code Online (Sandbox Code Playgroud)

因此错误.

你可能想要的是:

OBJ = lib.o
Run Code Online (Sandbox Code Playgroud)

为了节省您必须手动将所有.c源文件转换为.o您可以使用这样的规则而不是OBJ = lib.o:

OBJ = $(SRC:%.c=%.o)
Run Code Online (Sandbox Code Playgroud)

这将创建一个变量,OBJ其中包含所有文件的列表,SRC其中任何.c扩展名都已更改为.o.例如.如果我们有,SRC = foo.c bar.c那么上面的规则将自动扩展为:

OBJ = foo.o bar.o
Run Code Online (Sandbox Code Playgroud)