【问题标题】:Makefile error in CC中的Makefile错误
【发布时间】:2014-11-20 00:17:21
【问题描述】:
CC   = gcc
OPTS = -W -O3

SRCDIR=./src
OBJDIR=./obj
INCDIR=./inc
BINDIR=./bin

SRCS=$(SRCDIR)/Functions.c \
SRCS=$(SRCDIR)/Function1.c \ 
SRCS=$(SRCDIR)/Function2.c \ 
SRCS=$(SRCDIR)/Function3.c \ 


INCLUDE = $(addprefix -I,$(INCDIR))
OBJS=${SRCS:$(SRCDIR)/%.c=$(OBJDIR)/%.o}
CFLAGS   = $(OPTS) $(INCLUDE) $(DEBUG)

TARGET = $(BINDIR)/ Functions

all: $(TARGET)

$(TARGET): $(OBJS) 
    ${CC} ${CFLAGS} -o $@ $(OBJS)

$(OBJS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@

Functions.c 里面有一个 main 调用 Function1(); .....Function3();

我正在尝试添加基于#ifndef 的调试标志

如何在这个 Makefile 中添加调试标志并设置调试编译器指令?我有 #ifndef NDEBUG...#endif 来自 Functions.h

【问题讨论】:

  • 你想做什么?如果您在 $(BINDIR) 目录中创建名为 Functions 的内容,请尝试在 TARGET= 行中取出空间,因此 TARGET = $(BINDIR)/Functions

标签: c makefile


【解决方案1】:
TARGET = $(BINDIR)/ Functions

应该是?

TARGET = $(BINDIR)/Functions

【讨论】:

  • SRCS有什么问题吗....SRCS=$(SRCDIR)/Function2.c \ SRCS=$(SRCDIR)/Function3.c \ ?
  • @Ichihara26 在第一个之后取出每个SRCS=。行尾的反斜杠将继续该行。
  • 它只给了我一个对象文件Function3.o里面的obj文件夹
  • 我在第一个之后删除了 SRCS=,但它开始抱怨 *** 缺少分隔符。停止。除了第一个使用 Functions.c\ 之外,我在每个 $(SRCDIR) 之前都尝试了 TAB。它仍然没有解决我的问题。
  • 排长队行不行? SRCS=$(SRCDIR)/Functions.c $(SRCDIR)/Function1.c...
【解决方案2】:
CC=gcc
OPTS=-W -O3
DEBUG=
RM=rm

SRCDIR=src
OBJDIR=obj
INCDIR=inc
BINDIR=bin

SRCS=$(SRCDIR)/*.c

INCLUDE=$(addprefix -I, $(INCDIR))
OBJS=obj/Functions.o obj/Function1.o obj/Function2.o obj/Function3.o
CFLAGS = $(OPTS) $(INCLUDE) $(DEBUG)

TARGET = $(BINDIR)/Functions

all: $(TARGET)

$(TARGET): $(OBJS)
  $(CC) $(CFLAGS) -o $@ $(OBJS)

$(OBJS): $(OBJDIR)/%.o : $(SRCDIR)/%.c
  $(CC) $(CFLAGS) -c $< -o $@

clean:
  $(RM) -f $(TARGET) $(OBJDIR)/*.o

我无法让您的 OBJS 扩展正常工作,但 adove 对我有用。

【讨论】:

  • 我会扩展这些通配符*,您可以将rm 替换为$(RM)。把-r 放在rm 上让我害怕,因为你在这里不需要它。如果您忘记设置$(BINDIR),那么您只是删除了系统上您有权访问的所有内容。
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多