带有线程和我的库的 makefile 出错

Error on makefile with threads and my library

所以我一直在搜索和寻找可以帮助我使用 Makefile 的东西,但我没有找到任何东西,所以这就是我来这里的原因。

我现在的 makefile 是这样的:

CC  = gcc
CFLAGS  = -Wall
LDFLAGS += -L$(LIBB)
LDFLAGS += -static lib1.h
LDLIBS  = -lm -lpthread -lrt -l

SOURCES=lib1.c prac3.c prac3_reader.c
LIBRARIES=lib1.o
INCLUDES=lib1.h
PROGRAMS=prac3 prac3_reader

all: $(OBJS) $(PROGRAMS)

$(PROGRAMS): $(LIBRARIES) $(INCLUDES)
    $(CC) $(LDFLAGS) $(LIBRARIES) $(LDLIBS) $@.o -o $@


%.o: %.c $(INCLUDES)  
    $(CC) $(CFLAGS)  -o $@ -c $<

clean:
    rm -rf *.o *~ $(PROGRAMS)

我知道可能有很多东西可以删除,但我真的不知道是哪些。我有两个名为

的程序

prac3.c

prac3_reader.c

此外,我有自己的库,名为

lib1.c

并且编译得像

lib1.h

当我使用终端进入我的目录并使用命令 make 时,我收到此错误:

gcc -L -static lib1.h lib1.o -lm -lpthread -lrt -l prac3.o -o prac3
/usr/bin/ld: no se puede encontrar -lprac3.o
collect2: error: ld returned 1 exit status
Makefile:15: recipe for target 'prac3' failed
make: *** [prac3] Error 1

我 运行 Ubuntu。

-l 标志需要一个参数。当它在 gcc 语句中组合时,它会导致 prac3.o 参数被视为库的名称。没有这样的库prac3.o,所以你得到错误。

通常 .o 文件不是 "libraries"。它们是目标文件。删除 -l 标志,你会没事的。

"libraries" 通常是来自库路径的 .a.so 文件 - 但即便如此,您也不会指定后缀(例如“-lpthreads”)。