编译时出错,但提到了所需的库

时间:2014-05-18 14:24:21

标签: c makefile

我制作了以下makefile来运行代码

MODE := 3
FRICTION := 7
EREST:= 1

CC := gcc -g
CFLAGS := -lpthread -lGLU -lglut -lGL -lm
vpath %.h header
vpath %.c src
vpath %.o src
CFILES := aibot1.c start.c physics.c bothandler.c man.c manageer.c network.c rules.c msghandler.c
%.o: %.c headers.h
    @$(CC) $(CFLAGS) -c $< -o src/$@;
type:   
    @cd header;\
    echo "#define FRICTION $(FRICTION) \n#define MODE $(MODE) \n#define EREST $(EREST) \n" > mainhead1.h;\
    cd .. ;
carrom: type
    @cd src;\
    echo $(CFLAGS);\
    $(CC) $(CFLAGS) $(CFILES) -o carrom;\
    mv carrom ..;\

但它显示错误未定义引用'sqrt'和'pthread_create',但我分别包含-lm和-lpthread。

1 个答案:

答案 0 :(得分:0)

在命令行上的文件之后,需要在中指定库。将它们放在LDFLAGS而不是CFLAGS中也是传统的。

如果你有所改变,那么:

$(CC) $(CFLAGS) $(CFILES) -o carrom;

为:

$(CC) $(CFILES) -o carrom $(CFLAGS)
然后它应该工作。

此外,您只需要在链接时指定库,而不是在编译时指定库(因此它们进入LDFLAGS,而不是CFLAGS),所以在这一行:

@$(CC) $(CFLAGS) -c $< -o src/$@

指定库(所有CFLAGS包含的内容)不执行任何操作。