【问题标题】:Makefile, clang OK, gcc errorMakefile,clang OK,gcc 错误
【发布时间】:2014-05-02 07:47:34
【问题描述】:

当我注释/取消注释 clang/gcc 时,我的 makefile 可以与 clang 一起使用,但在 gcc 中失败……我不知道为什么。

#CC=gcc
#CFLAGS=-I -std=gnu99 -Wall -Wextra -Werror -pedantic

CC=clang
CFLAGS=-I -std=gnu99 -Wall -Wextra -Werror -pedantic

LIBS=-lpthread -lrt

SRC=rivercrossing.c functions.c
OBJ=$(SRC:.c=.o)
DEPS=rivercrossing.h

%.o: %.c $(DEPS)
    $(CC) -c -o $@ $<

rivercrossing: $(OBJ)
    $(CC) $^ $(CFLAGS) $(LIBS) -o $@

.PHONY: clean
clean:
    rm -f *.o rivercrossing

使用 gcc 我有以下错误:

error: ‘for’ loop initial declarations are only allowed in C99 mode

error: ISO C90 forbids mixed declarations and code [-Werror=pedantic]
           int stat = 0;
           ^

error: C++ style comments are not allowed in ISO C90 [-Werror]

*.o 文件也没有被删除,当我查看文件夹时它们仍然存在。为什么? 谢谢你的帮助。

【问题讨论】:

  • 创建对象文件时需要传递CFLAGS
  • 尝试将$(CC) -c -o $@ $&lt;更改为$(CC) -c $(CFLAGS) -o $@ $&lt;
  • 它没有帮助,gcc -c -I -std=gnu99 -Wall -Wextra -Werror -pedantic -o functions.o functions.c 和以前一样的错误。

标签: c gcc makefile clang


【解决方案1】:

你必须使用 C99 模式而不是 gnu99 模式,或者你可以在 for 循环之外声明变量。

有一个编译器开关可以启用 C99 模式,其中允许在 for 循环内声明一个变量。要打开它,请使用编译器开关 -std=c99

【讨论】:

    猜你喜欢
    • 2018-03-09
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2023-03-29
    • 2021-07-06
    • 2018-11-29
    • 1970-01-01
    相关资源
    最近更新 更多