Makefile无法正确编译

时间:2014-02-23 07:31:50

标签: c++ makefile

我无法弄清楚如何让我的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

1 个答案:

答案 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)