Gcc 编译错误选项-std=c99或-std=gnu99
我从C语言开始,我试图编译我的程序,但我有这个错误 错误:仅在C99模式下允许“for”循环初始声明 我想在我的Makefile中包含选项Gcc 编译错误选项-std=c99或-std=gnu99,gcc,makefile,Gcc,Makefile,我从C语言开始,我试图编译我的程序,但我有这个错误 错误:仅在C99模式下允许“for”循环初始声明 我想在我的Makefile中包含选项-std=c99,但我不知道放在哪里 # Compilatore CC=gcc CFLAGS=-W -g -Wall $(OPTLEVEL) BINFOLDER=./bin SRCFOLDER=./src OBJFOLDER=./obj all: test test: $(OBJFOLDER)/tas-data.o $(OBJFOLDER)/tas-fct
-std=c99
,但我不知道放在哪里
# Compilatore
CC=gcc
CFLAGS=-W -g -Wall $(OPTLEVEL)
BINFOLDER=./bin
SRCFOLDER=./src
OBJFOLDER=./obj
all: test
test: $(OBJFOLDER)/tas-data.o $(OBJFOLDER)/tas-fct.o $(OBJFOLDER)/tas-io.o $(OBJFOLDER)/tas-main.o
$(CC) -o $(BINFOLDER)/tas-main $(OBJFOLDER)/tas-data.o $(OBJFOLDER)/tas-fct.o $(OBJFOLDER)/tas-io.o $(OBJFOLDER)/tas-main.o
$(OBJFOLDER)/tas-main.o: $(SRCFOLDER)/tas-main.c $(SRCFOLDER)/tas-io.h $(SRCFOLDER)/tas-fct.h $(SRCFOLDER)/tas-data.h
$(CC) -o $(OBJFOLDER)/tas-main.o -c $(SRCFOLDER)/tas-main.c
$(OBJFOLDER)/tas-data.o: $(SRCFOLDER)/tas-data.c $(SRCFOLDER)/tas-data.h
$(CC) -o $(OBJFOLDER)/tas-data.o -c $(SRCFOLDER)/tas-data.c
$(OBJFOLDER)/tas-fct.o: $(SRCFOLDER)/tas-fct.c $(SRCFOLDER)/tas-fct.h $(SRCFOLDER)/tas-data.h
$(CC) -o $(OBJFOLDER)/tas-fct.o -c $(SRCFOLDER)/tas-fct.c
$(OBJFOLDER)/tas-io.o: $(SRCFOLDER)/tas-io.c $(SRCFOLDER)/tas-io.h $(SRCFOLDER)/tas-data.h
$(CC) -o $(OBJFOLDER)/tas-io.o -c $(SRCFOLDER)/tas-io.c
clean:
rm -f $(BINFOLDER)/tas-main $(OBJFOLDER)/*.o
cleanall: clean
rm -rf $(BINFOLDER)/*
您应该将其放在为编译提供的标志/选项中。由于在
CFLAGS
中插入了其他选项,您可以将此选项放在CFLAGS
中
CFLAGS=-W -g -std=c99 -Wall $(OPTLEVEL)
在Makefile中的编译命令中使用CFLAGS
,如下所示:
$(CC) $(CFLAGS)-o $(OBJFOLDER)/tas-main.o -c $(SRCFOLDER)/tas-main.c
编辑
您必须以以下方式修改Makefile:
# Compilatore
CC=gcc
CFLAGS=-Wextra -g -std=c99 -Wall $(OPTLEVEL)
BINFOLDER=./bin
SRCFOLDER=./src
OBJFOLDER=./obj
all: test
test: $(OBJFOLDER)/tas-data.o $(OBJFOLDER)/tas-fct.o $(OBJFOLDER)/tas-io.o $(OBJFOLDER)/tas-main.o
$(CC) $(CFLAGS) -o $(BINFOLDER)/tas-main $(OBJFOLDER)/tas-data.o $(OBJFOLDER)/tas-fct.o $(OBJFOLDER)/tas-io.o $(OBJFOLDER)/tas-main.o
$(OBJFOLDER)/tas-main.o: $(SRCFOLDER)/tas-main.c $(SRCFOLDER)/tas-io.h $(SRCFOLDER)/tas-fct.h $(SRCFOLDER)/tas-data.h
$(CC) $(CFLAGS) -o $(OBJFOLDER)/tas-main.o -c $(SRCFOLDER)/tas-main.c
$(OBJFOLDER)/tas-data.o: $(SRCFOLDER)/tas-data.c $(SRCFOLDER)/tas-data.h
$(CC) $(CFLAGS) -o $(OBJFOLDER)/tas-data.o -c $(SRCFOLDER)/tas-data.c
$(OBJFOLDER)/tas-fct.o: $(SRCFOLDER)/tas-fct.c $(SRCFOLDER)/tas-fct.h $(SRCFOLDER)/tas-data.h
$(CC) $(CFLAGS) -o $(OBJFOLDER)/tas-fct.o -c $(SRCFOLDER)/tas-fct.c
$(OBJFOLDER)/tas-io.o: $(SRCFOLDER)/tas-io.c $(SRCFOLDER)/tas-io.h $(SRCFOLDER)/tas-data.h
$(CC) $(CFLAGS) -o $(OBJFOLDER)/tas-io.o -c $(SRCFOLDER)/tas-io.c
clean:
rm -f $(BINFOLDER)/tas-main $(OBJFOLDER)/*.o
cleanall: clean
rm -rf $(BINFOLDER)/*
CFLAGS
似乎是个好地方。@Michael,除了CFLAGS坐在那里没有使用之外。需要将其添加到规则中。感谢您的回答,我在适当的位置添加了选项-std=c99,但我仍然有相同的错误Michael和@n.m.对您的问题的评论足以回答您的问题。@Roxanne,您需要在使用$CC
的每一行中添加$(CFLAGS)
。这样,这些编译器选项将被传递到编译器可执行文件。请编辑您的makefile以添加$(CFLAGS)
,无论您在哪里使用$(CC)
。请检查我的答案,我已经包括了一个例子。-W
不推荐使用<代码>-Wextra新版本是否将其写入测试行<代码>$(CC)$(CFLAGS)-o$(OBJFOLDER)/test