我制作了以下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。
答案 0 :(得分:0)
在命令行上的文件之后,需要在中指定库。将它们放在LDFLAGS
而不是CFLAGS
中也是传统的。
如果你有所改变,那么:
$(CC) $(CFLAGS) $(CFILES) -o carrom;
为:
$(CC) $(CFILES) -o carrom $(CFLAGS)
然后它应该工作。
此外,您只需要在链接时指定库,而不是在编译时指定库(因此它们进入LDFLAGS
,而不是CFLAGS
),所以在这一行:
@$(CC) $(CFLAGS) -c $< -o src/$@
指定库(所有CFLAGS
包含的内容)不执行任何操作。