GCC makefile不接受-std = c99 -lm [英] GCC makefile doesn't accept -std=c99 -lm

查看:295
本文介绍了GCC makefile不接受-std = c99 -lm的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用gcc编译器遇到了我的makefile问题。如果我直接使用gcc:

  gcc -std = c99 -lm tm.c tm_coins.c tm_options.c tm_stock.c tm_utility.c -o tm -Wall -pedantic 

一切正常。我需要-std-c99和-lm。



但是,我被告知使用makefile。这是我的make文件:

  CFLAGS = -ansi -Wall -pedantic 
LFLAGS = -std = c99 -lm
CC = gcc
全部:tm
tm:tm.o tm_coins.o tm_options.o tm_stock.o tm_utility.o
$(CC)$(LFLAGS)tm.o tm_coins.o tm_options.o tm_stock.o tm_utility.o -o tm $(CFLAGS)

tm.o:tm.h tm.c
$(CC)$(LFLAGS)$ (CFLAGS)-c tm.c

tm_coins.o:tm_coins.h tm_coins.c
$(CC)$(LFLAGS)$(CFLAGS)-c tm_coins.c

tm_options:tm_options.h tm_options.c
$(CC)$(LFLAGS)$(CFLAGS)-c tm_options.c

tm_stock:tm_stock.h tm_stock.c
$(CC)$(LFLAGS)$(CFLAGS)-c tm_stock.c

tm_utility:tm_utility.h tm_utility.c
$(CC)$(LFLAGS)$ (CFLAGS)-c tm_utility.c

使用上面的makefile,我会得到以下错误。我的理解是-std = c99和-lm不起作用。 (看下面的第一行:-std = c99和-lm不存在)

  gcc -ansi -Wall -pedantic -c -o tm_options.o tm_options.c 
tm_options.c:在函数'purchase_ticket'中:
tm_options.c:37:错误:'/'令牌之前的期望表达式
tm_options.c :52:error:'/'前的期望表达式
tm_options.c:102:警告:ISO C90禁止混合声明和代码
tm_options.c:函数'display_tickets':
tm_options .c:239:错误:'/'令牌之前的预期表达式
tm_options.c:函数'add_ticket':
tm_options.c:285:错误:'/'令牌之前的预期表达式
tm_options.c:303:错误:'/'标记之前的预期表达式
tm_options.c:314:警告:ISO C90禁止混合声明和代码
tm_options.c:函数'delete_ticket':
tm_options.c:387:错误:'/'令牌之前的预期表达式
tm_options.c:405:错误:'/'之前的预期表达式令牌
tm_options.c:函数'display_coins':
tm_options.c:461:错误:'/'令牌之前的预期表达式
tm_options.c:函数'restock_tickets':
tm_options.c:501:错误:'/'令牌之前的期望表达式
tm_options.c:函数'restock_coins':
tm_options.c:526:错误:'/'令牌之前的预期表达式
tm_options.c:函数'save_data':
tm_options.c:555:警告:ISO C90禁止混合声明和代码

哪里会出错? 您不希望 LFLAGS 编译命令 - 在 CFLAGS 中放入 -std = c99 - makefile应该更像这样:

  CFLAGS = -ansi -Wall -pedantic -std = c99 
LFLAGS = -lm
CC = gcc

全部:tm

tm:tm.o tm_coins.o tm_options.o tm_stock.o tm_utility.o
$(CC)$(LFLAGS)tm.o tm_coins。 o tm_options.o tm_stock.o tm_utility.o -o tm

tm.o:tm.h tm.c
$(CC)$(CFLAGS)-c tm.c

tm_coins.o:tm_coins.h tm_coins.c
$(CC)$(CFLAGS)-c tm_coins.c

tm_options.o:tm_options.h tm_options。 c
$(CC)$(CFLAGS)-c tm_options.c

tm_stock.o:tm_stock.h tm_stock.c
$(CC)$(CFLAGS)-c tm_stock.c

tm_utility.o:tm_utility.h tm_utility.c
$(CC)$(CFLAGS)-c tm_utility.c

(我也添加了缺少的.o后缀作为pointe d出自Magnus。)


I am having problem with my makefile with gcc compiler. If I use gcc directly as:

gcc -std=c99 -lm tm.c tm_coins.c tm_options.c tm_stock.c tm_utility.c -o tm -Wall -pedantic

Everything works fine. I need -std-c99 and -lm.

However, I have been told to use makefile. Here is my make file:

CFLAGS=-ansi -Wall -pedantic
LFLAGS=-std=c99 -lm 
CC=gcc
all:tm
tm:tm.o tm_coins.o tm_options.o tm_stock.o tm_utility.o
    $(CC) $(LFLAGS) tm.o tm_coins.o tm_options.o tm_stock.o tm_utility.o -o tm $(CFLAGS)

tm.o: tm.h tm.c
    $(CC) $(LFLAGS) $(CFLAGS) -c tm.c

tm_coins.o:tm_coins.h tm_coins.c
    $(CC) $(LFLAGS) $(CFLAGS) -c tm_coins.c

tm_options:tm_options.h tm_options.c
    $(CC) $(LFLAGS) $(CFLAGS) -c tm_options.c

tm_stock:tm_stock.h tm_stock.c
    $(CC) $(LFLAGS) $(CFLAGS) -c tm_stock.c

tm_utility:tm_utility.h tm_utility.c
    $(CC) $(LFLAGS) $(CFLAGS) -c tm_utility.c

With above makefile I get below errors. My understanding is that -std=c99 and -lm doesn't work. (look at the first line below. -std=c99 and -lm are not there)

gcc -ansi -Wall -pedantic   -c -o tm_options.o tm_options.c
tm_options.c: In function ‘purchase_ticket’:
tm_options.c:37: error: expected expression before ‘/’ token
tm_options.c:52: error: expected expression before ‘/’ token
tm_options.c:102: warning: ISO C90 forbids mixed declarations and code
tm_options.c: In function ‘display_tickets’:
tm_options.c:239: error: expected expression before ‘/’ token
tm_options.c: In function ‘add_ticket’:
tm_options.c:285: error: expected expression before ‘/’ token
tm_options.c:303: error: expected expression before ‘/’ token
tm_options.c:314: warning: ISO C90 forbids mixed declarations and code
tm_options.c: In function ‘delete_ticket’:
tm_options.c:387: error: expected expression before ‘/’ token
tm_options.c:405: error: expected expression before ‘/’ token
tm_options.c: In function ‘display_coins’:
tm_options.c:461: error: expected expression before ‘/’ token
tm_options.c: In function ‘restock_tickets’:
tm_options.c:501: error: expected expression before ‘/’ token
tm_options.c: In function ‘restock_coins’:
tm_options.c:526: error: expected expression before ‘/’ token
tm_options.c: In function ‘save_data’:
tm_options.c:555: warning: ISO C90 forbids mixed declarations and code

Where would be the error? Thanks in advance.

解决方案

You don't want LFLAGS in the compile commands anyway - put -std=c99 in CFLAGS - the makefile should be more like this:

CFLAGS = -ansi -Wall -pedantic -std=c99
LFLAGS = -lm 
CC = gcc

all: tm

tm: tm.o tm_coins.o tm_options.o tm_stock.o tm_utility.o
    $(CC) $(LFLAGS) tm.o tm_coins.o tm_options.o tm_stock.o tm_utility.o -o tm

tm.o: tm.h tm.c
    $(CC) $(CFLAGS) -c tm.c

tm_coins.o: tm_coins.h tm_coins.c
    $(CC) $(CFLAGS) -c tm_coins.c

tm_options.o: tm_options.h tm_options.c
    $(CC) $(CFLAGS) -c tm_options.c

tm_stock.o: tm_stock.h tm_stock.c
    $(CC) $(CFLAGS) -c tm_stock.c

tm_utility.o: tm_utility.h tm_utility.c
    $(CC) $(CFLAGS) -c tm_utility.c

(I've also added the missing .o suffixes as pointed out by Magnus.)

这篇关于GCC makefile不接受-std = c99 -lm的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆