c语言 - 使用带有扩充"-std=c11"或"std=c99"的生成文件时出现未知错误



我尝试使用Makefile来启动我的C程序,命令行如下CCD_ 1。我在头文件和build.c(使用<dirent.h>的那个(中都声明了#include <dirent.h>

不知怎的,它无法从-std=c11-std=c99开始,它将返回一个错误:

错误:"DT_DIR"未声明(此函数中首次使用(

(均为c11c99(,如果我在Makefile中包含其中一个参数。

如果我把它取下来,它会很好地工作。既然-std=c11 -Wall -Werror是强制性的,有什么办法解决这个问题吗?

关于未定义的DT_DIR,我不能使用-D_BSD_SOURCE,因为它已被弃用。

Makefile

PROJECT = test
HEADERS = $(PROJECT).h
OBJECT = build.o
C11     =  cc -std=c11
CFLAGS  =  -Wall -Werror
$(PROJECT):$(OBJECT)
$(C11) $(CFLAGS) -o $(PROJECT) $(OBJECT) -lm
$(OBJECT):%.o: %.c $(HEADERS)
$(C11) $(CFLAGS) -c $<

cc -std=c11 -Wall -Werror -c build.c0的内容不应影响结果,因为如果没有-std=c11,它仍然可以工作。

我不知道它是否能解决您的问题,但我建议您简化Makefile一些,以依赖隐式规则来编译和构建您的项目。

只列出Makefile中的标志、选项和依赖项,让make处理其余内容:

# Flags for the compiler CC when building object files
CFLAGS = -std=c11 -Wall -Werror
# Flags for the linker LD when building the executable program
LDFLAGS = -std=c11
# Libraries for the linker to link with
LBLIBS = -lm
# List dependencies
test: build.o
build.o: build.c test.h

这将从源文件build.c创建对象文件build.o,并依赖于test.h头文件。然后它将链接build.o对象文件以创建test可执行程序,与-lm链接。

最新更新