C中的Makefile错误

Posted

技术标签:

【中文标题】C中的Makefile错误【英文标题】:Makefile error in C 【发布时间】: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 【参考方案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),那么您只是删除了系统上您有权访问的所有内容。

以上是关于C中的Makefile错误的主要内容,如果未能解决你的问题,请参考以下文章

Makefile:链接器错误[重复]

依赖树中的 Makefile 循环

Protobuf 2.6.0 (Windows 10 Mingw) 中的 Makefile 错误

求助 怎么把makefile文件中的编译方法换成arm-linux-的编译方法 把该换的地方都换了 还是老提示错误

llvm编译makefile152错误

编译 C 代码时的 Makefile 错误