繁体   English   中英

C:在 make 文件中使用 -D 进行编译

[英]C: compiling with -D in make file

嗨,我在编译 c 程序时遇到问题。 我正在使用 Makefile 来编译它。

这是我的制作文件:

# flags per la compilazione
#CFLAGS = -std=c89 -Wpedantic
    
CC = gcc
SO_HEIGHT= SO_HEIGHT=20
SO_WIDTH= SO_WIDTH=60

LIBS=libs/
OBJ = $(LIBS)ipc_utilities.o $(LIBS)utilities.o $(LIBS)dijkstra.o
OBJMAIN = main.o
OBJSOSOURCES=so_sources.o
OBJTAXI=taxi.o
all : utilities main so_sources taxi clean run
main: $(OBJMAIN) $(OBJ)
    $(CC)  $(OBJMAIN) $(OBJ)-o main
so_sources: $(OBJSOSOURCES) $(OBJ)
    $(CC) $(OBJSOSOURCES) $(OBJ)  -o so_sources
taxi: $(OBJTAXI) $(OBJ)
    $(CC) $(OBJTAXI) $(OBJ)-o taxi
utilities: 
    $(CC)   -c  -D $(SO_HEIGHT) -D $(SO_WIDTH) -o $(LIBS)utilities.o $(LIBS)utilities.c

clean:
    rm -f *.o 
    rm -f $(LIBS)*.o
    clear
    

# il target run si usa talvolta per eseguire l'applicazione
run: 
    ./main

这是我得到的错误:

gcc   -c  -D SO_HEIGHT=20 -D SO_WIDTH=60 -o libs/utilities.o libs/utilities.c
gcc    -c -o libs/ipc_utilities.o libs/ipc_utilities.c
In file included from libs/ipc_utilities.h:4,
                 from libs/ipc_utilities.c:8:
libs/utilities.h:44:27: error: ‘SO_HEIGHT’ undeclared here (not in a function)
   44 |     struct strada cityMap[SO_HEIGHT][SO_WIDTH];
      |                           ^~~~~~~~~
libs/utilities.h:44:38: error: ‘SO_WIDTH’ undeclared here (not in a function)
   44 |     struct strada cityMap[SO_HEIGHT][SO_WIDTH];
      |                                      ^~~~~~~~
make: *** [<builtin>: libs/ipc_utilities.o] Error 1

在 ipc_utilities.hi 上包含实用程序.h:

#include <stdio.h>
#include <stdlib.h>
#include "utilities.h" // error

我熟悉 makefile,有人可以帮忙吗?

有很多方法可以将这些部分组合在一起,但由于您需要定义名称及其值,我会执行以下操作:

SO_HEIGHT   := 20
SO_WIDTH    := 20

CFLAGS  := -std=c11 -Wall -Wextra -pedantic -Wshadow
CFLAGS  += -DSO_HEIGHT=$(SO_HEIGHT) -DSO_WIDTH=$(SO_WIDTH)
...
$(CCLD) -o $(APPNAME) $(OBJECTS) $(CFLAGS) $(LDFLAGS) $(LIBS)

现在您已经定义了 label 和值作为CFLAGS变量的一部分(例如-DSO_HEIGHT=$(SO_HEIGHT) ),您不需要在 makefile 规则中进一步包含任何内容。


当然,您也可以简单地执行以下操作:

SO_HEIGHT   := SO_HEIGHT=20
SO_WIDTH    := SO_WIDTH=20

CFLAGS  := -std=c11 -Wall -Wextra -pedantic -Wshadow
CFLAGS  += -D$(SO_HEIGHT) -D$(SO_WIDTH)

这真的是你想做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM