我无法弄清楚如何让我的Makefile使用-lpthread编译一组cpp文件。问题出现在g ++ * .cpp -c上。我的函数(在外部文件中),找不到pthread_exit。这样做的正确方法是什么?
#
#Makefile for producerConsumer
#
RM = rm -f
#SRC = producer.cpp consumer.cpp
#OBJ = $(SRC:.cpp=.o)
TESTNAME = test
TESTSRC = main.cpp
#
retest: re test
test:
g++ *.cpp -c
g++ *.o -o $(TESTNAME) -lpthread
clean:
-$(RM) *.o
-$(RM) *~
-$(RM) \#*
-$(RM) *.core
fclean: clean
-$(RM) $(TESTNAME)
-$(RM) *.o
re: fclean
答案 0 :(得分:3)
看起来您正在使用Linux,因此请使用-pthread
而不是-lpthread
,并确保将其添加到编译和链接命令中。 -pthread
选项将确保在(预)编译代码时激活pthread支持,并确保正确链接正确的库。
此外,请确保在任何使用pthread函数的编译单元中包含<pthread.h>
,因此它们都会查找正确的符号。
这是一个示例makefile:
CXX = g++
LD = g++
CXXFLAGS = -Wall -pthread
LDFLAGS = -pthread
SOURCES = main.cpp
OBJECTS = $(SOURCES:.cpp=.o)
BINARY = test
all : $(SOURCES) $(BINARY)
$(BINARY) : $(OBJECTS)
$(LD) $(LDFLAGS) $^ -o $@
.cpp.o :
$(CXX) $(CXXFLAGS) -c $< -o $@
.PHONY : clean
clean :
rm -f *.o $(BINARY)