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错误的主要内容,如果未能解决你的问题,请参考以下文章
Protobuf 2.6.0 (Windows 10 Mingw) 中的 Makefile 错误