它与makefile无关。ISO C90 禁止在块或文件开头以外的任何地方声明变量 - 像这样
int main(int argc, char **argv) {
int a; /* Ok */
int b = 3; /* Ok */
printf("Hello, the magic number is %d!\n", b);
int c = 42; /* ERROR! Can only declare variables in the beginning of the block */
printf("I also like %d.. but not as much as %d!\n", c, b);
return 0;
}
因此,它必须修改为...
int main(int argc, char **argv) {
int a; /* Ok */
int b = 3; /* Ok */
int c = 42; /* Ok! */
printf("Hello, the magic number is %d!\n", b);
printf("I also like %d.. but not as much as %d!\n", c, b);
return 0;
}
您只能在源代码中“修复”它,而不是在 makefile 中。
这条规则在 C99 中已经放宽了,但在我看来,将变量定义、声明和初始化与其下面的代码分开是个好主意 :)
因此,要更改您的 makefile 以使其使用 C99 编译,您需要更改您的 makefile 所引用的“build”目录中的 Makefile,并在编译源文件的“gcc”行添加“-std=c99”。