首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Makefile -std=c99错误

Makefile -std=c99错误
EN

Stack Overflow用户
提问于 2014-05-15 21:13:40
回答 3查看 3.2K关注 0票数 1
代码语言:javascript
运行
复制
all: matrices.c calculations.o
    gcc -std=c99 matrices.c calculations.o -o -lm PROGRAM2_EXE

lib: matrices.h calculations.c  
    gcc -c -std=c99 calculations.c -o calculations.o

clean: 
    rm matrices.o calculations.o PROGRAM2_EXE

这是我的项目制作文件。在我的矩阵和我的计算中。c有多个for循环。它给我的错误是错误:“for”循环初始声明只允许在c99模式下进行,但是我的-std=c99在我的文件中。我的问题是

  1. 如何将makefile修复为使用for循环运行?
EN

回答 3

Stack Overflow用户

发布于 2014-05-15 22:19:07

对于calculations.o,您没有规则。这意味着makefile没有指定如何生成calculations.o。您只有一个生成alllib的规则。

Gmake有一些默认规则。他们中的一个是指,如果您没有filename.o的规则,那么它是使用$(CC) $(CPPFLAGS) $(CFLAGS) -c filename.c编译的。

您的make all行是:

代码语言:javascript
运行
复制
all: matrices.c calculations.o

当您发出makemake all时,gmake首先检查依赖项。matrices.c已经存在了,所以这很好。但是如果calculations.o不存在,那么它就决定需要构建calculations.o。您没有为calculations.o指定规则,所以使用了隐式规则,其中没有-std=c99

注意,您的lib规则编写得很糟糕。所有规则都应该创建相应名称的文件,或者声明为.PHONY。似乎您认为,如果make lib文件不存在,那么make应该以某种方式推断它需要执行calculations.o,但这不是make的工作方式。

要解决问题,只需将lib:更改为calculations.o:即可。而且,修复all行也是很好的风格。规则并不是all,而是PROGRAM2_EXE,所以:

代码语言:javascript
运行
复制
.PHONY: all
all: PROGRAM2_EXE

PROGRAM2_EXE: matrices.c calculations.o
    gcc -std=c99 matrices.c calculations.o -o PROGRAM2_EXE -lm

(编辑:正如Chris指出的,-o开关必须紧跟文件名)

最好有一个规则matrices.o来编译matrices.c,然后有一个规则PROGRAM2_EXE: matrices.o calculations.o将两者连接起来。

票数 2
EN

Stack Overflow用户

发布于 2014-05-15 23:11:28

这一行动:

代码语言:javascript
运行
复制
gcc -std=c99 matrices.c calculations.o -o -lm PROGRAM2_EXE

告诉gcc生产一个名为-lm的可执行文件,这可能不是你想要的。

由于您没有生成connections.o的规则,所以make将使用它的默认规则从connections.c构建它,这很可能类似于(来自gmake):

代码语言:javascript
运行
复制
%.o: %.c
        $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c -o $@ $<

因为您没有在CFGLAGSCPPFLAGS中设置CFGLAGSCPPFLAGS,所以不会使用它。

票数 2
EN

Stack Overflow用户

发布于 2018-06-04 10:58:12

我使用以下CFLAGS:

CFLAGS = -Wall -g -std=c99

这对我很有好处。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23688746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档