将pthread标志放在MakeFile中的位置?

时间:2015-03-27 19:00:16

标签: makefile

我正在尝试使用MakeFile编译程序。但是,我似乎无法弄清楚在哪里贴上旗帜来识别pthreads,甚至是那个旗帜究竟是什么。
我已就此主题进行了一些搜索,但我觉得我发现的结果并不清楚如何解决问题,所以我将问题带到论坛帖子。

无论如何,这里是我文件的内容。我已经标出了我认为旗帜可以去的地方。

#CC = cc
CFLAGS=-Wall (flag here?)
OUTFILE=app

# Debug flags
DFLAGS=-g -DDEBUG

# Release flags
RFLAGS=

# Targets to build
SOURCES=PosixSavings.c

.PHONY: all
all: CFLAGS+=$(RFLAGS)
all: link

.PHONY: all-debug
all-debug: CFLAGS+=$(DFLAGS)
all-debug: link

.PHONY: clean
clean:
    $(RM) $(SRCcIR)/*~
    $(RM) $(INCDIR)/*~
    $(RM) *~
    $(RM) *.o
    $(RM) $(OUTFILE)

link:
    $(CC) $(CFLAGS) $(SOURCES) -o $(OUTFILE) (flag here?)

如果此处已存在解决方案并且我已经错过了,请随时指出 非常感谢你。

1 个答案:

答案 0 :(得分:0)

我不知道该告诉你什么,因为它适用于我:

$ cat /tmp/pt.c
#include <stdio.h>
#include <pthread.h>

void* start(void* arg) { return arg; }

int main() { pthread_t pt; pthread_create(&pt, NULL, start, NULL); return 0; }

现在如果我在没有 -pthread的情况下运行,我会得到:

$ cc -Wall -g -DDEBUG /tmp/pt.c -o /tmp/pt
/tmp/ccFyRHKv.o: In function `main':
/tmp/pt.c:6: undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status

如果我添加-pthread(并且我把它放在哪里并不重要):

$ cc -Wall -pthread -g -DDEBUG /tmp/pt.c -o /tmp/pt

不会打印错误或警告。

因此,您需要编辑您的问题并显示打印输出的编译行,以及生成的确切错误(请将它们剪切并粘贴到您的问题中,然后添加空格,使它们显示为代码块)。那么也许我们可以弄清楚发生了什么。