C中Makefile的问题 #------------------------------------------------------------------- #选择编译器及其选项 #-------------------------------------------------------------------------- CC=gcc OPTS=-W-O3 #-------------------------------------------------------------------------- #添加要编译的调试标志以供调试器使用 #-------------------------------------------------------------------------- #调试=-g #-------------------------------------------------------------------------- #添加目录的名称 #-------------------------------------------------------------------------- SRCDIR=src OBJDIR=obj INCDIR=包括 BINDIR=bin #-------------------------------------------------------------------- #添加其余的源文件。不要忘记添加“\”字符 #继续排队。在最后一个源文件之后不需要它 #-------------------------------------------------------------------- SRCS=$(SRCDIR)/Lab12.c\Function1.c\Function2.c\Function3.c\Function4.c\Function5.c #-------------------------------------------------------------------- #您不需要编辑接下来的几行。它们定义了其他标志 #用于编译源代码 #-------------------------------------------------------------------- INCLUDE=$(addprefix-I,$(INCDIR)) OBJS=${SRCS:$(SRCDIR)/%.c=$(OBJDIR)/%.o} CFLAGS=$(选项)$(包括)$(调试) #-------------------------------------------------------------------- #在$(BINDIR)后面添加可执行文件的名称/ #-------------------------------------------------------------------- 目标=$(BINDIR)/Lab12 全部:$(目标) $(目标):$(OBJS) ${CC}${CFLAGS}-o$@$(OBJS) $(OBJS):$(OBJDIR)/%.o:$(SRCDIR)/%.c $(CC)$(CFLAGS)-c$

C中Makefile的问题 #------------------------------------------------------------------- #选择编译器及其选项 #-------------------------------------------------------------------------- CC=gcc OPTS=-W-O3 #-------------------------------------------------------------------------- #添加要编译的调试标志以供调试器使用 #-------------------------------------------------------------------------- #调试=-g #-------------------------------------------------------------------------- #添加目录的名称 #-------------------------------------------------------------------------- SRCDIR=src OBJDIR=obj INCDIR=包括 BINDIR=bin #-------------------------------------------------------------------- #添加其余的源文件。不要忘记添加“\”字符 #继续排队。在最后一个源文件之后不需要它 #-------------------------------------------------------------------- SRCS=$(SRCDIR)/Lab12.c\Function1.c\Function2.c\Function3.c\Function4.c\Function5.c #-------------------------------------------------------------------- #您不需要编辑接下来的几行。它们定义了其他标志 #用于编译源代码 #-------------------------------------------------------------------- INCLUDE=$(addprefix-I,$(INCDIR)) OBJS=${SRCS:$(SRCDIR)/%.c=$(OBJDIR)/%.o} CFLAGS=$(选项)$(包括)$(调试) #-------------------------------------------------------------------- #在$(BINDIR)后面添加可执行文件的名称/ #-------------------------------------------------------------------- 目标=$(BINDIR)/Lab12 全部:$(目标) $(目标):$(OBJS) ${CC}${CFLAGS}-o$@$(OBJS) $(OBJS):$(OBJDIR)/%.o:$(SRCDIR)/%.c $(CC)$(CFLAGS)-c$,c,gcc,makefile,C,Gcc,Makefile,我的所有“头”文件都在include文件夹中。我所有的源代码都在src文件夹中(Lab12.c、Function1.c、Function2.c…)。当我使用make命令时,我一直遇到这个错误 Makefile:45:targetFunction1.c'与目标模式不匹配 Makefile:45:targetFunction2.c'与目标模式不匹配 Makefile:45:targetFunction3.c'与目标模式不匹配 Makefile:45:targetFunction4.c'与目标模式不匹

我的所有“头”文件都在include文件夹中。我所有的源代码都在src文件夹中(Lab12.c、Function1.c、Function2.c…)。当我使用make命令时,我一直遇到这个错误

Makefile:45:target
Function1.c'与目标模式不匹配
Makefile:45:target
Function2.c'与目标模式不匹配 Makefile:45:target
Function3.c'与目标模式不匹配
Makefile:45:target
Function4.c'与目标模式不匹配 Makefile:45:目标'Function5.c'与目标模式不匹配 gcc-W-O3-Iinclude-c-o函数1.c gcc:没有输入文件 make:**[Function1.c]错误1

我不太明白它为什么会这样。所有这些文件都在src code文件夹中,为什么系统不能识别它们

    #-----------------------------------------------------------------------    ------
# Choose a compiler & its options
#--------------------------------------------------------------------------

CC   = gcc
OPTS = -W -O3

#--------------------------------------------------------------------------
# Add the debug flag to compile for use by a debugger
#--------------------------------------------------------------------------
#DEBUG=-g

#--------------------------------------------------------------------------
# Add the names of the directories
#--------------------------------------------------------------------------
SRCDIR= src
OBJDIR= obj
INCDIR= include
BINDIR= bin

#--------------------------------------------------------------------
# Add the rest of the source files. Don't forget to add the '\' character
# to continue the line. You don't need it after the last source file
#--------------------------------------------------------------------
SRCS=$(SRCDIR)/Lab12.c \ Function1.c \ Function2.c \ Function3.c \                                   Function4.c \          Function5.c 

#--------------------------------------------------------------------
# You don't need to edit the next few lines. They define other flags
# used in the compilation of the source code
#--------------------------------------------------------------------
INCLUDE = $(addprefix -I,$(INCDIR))
OBJS=${SRCS:$(SRCDIR)/%.c=$(OBJDIR)/%.o}
CFLAGS   = $(OPTS) $(INCLUDE) $(DEBUG)

#--------------------------------------------------------------------
# Add the name of the executable after the $(BINDIR)/
#--------------------------------------------------------------------
TARGET = $(BINDIR)/ Lab12

all: $(TARGET)

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

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

clean:
    rm -f $(OBJS)

 cleanall:
    rm -f $(OBJS)
    rm -f Lab12

 #--------------------------------------------------------------------
 # Add a target named cleanall that will remove the object files as well
 # as the executable
 #--------------------------------------------------------------------
似乎是错的;你应该试试

SRCS=$(SRCDIR)/Lab12.c \ Function1.c \ Function2.c \ Function3.c \
反而

更新

如果Function1.c等位于´$(SRCDIR)``中,则也必须将目录前置到这些文件中。(M Oehm的评论)

似乎是错的;你应该试试

SRCS=$(SRCDIR)/Lab12.c \ Function1.c \ Function2.c \ Function3.c \
反而

更新


如果Function1.c等位于´$(SRCDIR)``中,则也必须将目录前置到这些文件中。(来自Moehm的评论)

我的帖子的格式似乎有问题。在原始Makefile中。存在Function4.c和Function5.c。为了将行粘贴在一起,反斜杠必须是行上的最后一个字符;反斜杠和行尾之间不能有任何其他字符,甚至不能有空格。您可以将各种对象放在一行上,但不必用反斜杠将它们分开。如果
Function1.c
等位于
$(SRCDIR)
中,您也必须在这些文件前面加上目录。(或者您没有为任何文件指定
$(SRCDIR)
,以后也不会进行模式替换。)我的帖子中的格式似乎有问题。在原始Makefile中。存在Function4.c和Function5.c。为了将行粘贴在一起,反斜杠必须是行上的最后一个字符;反斜杠和行尾之间不能有任何其他字符,甚至不能有空格。您可以将各种对象放在一行上,但不必用反斜杠将它们分开。如果
Function1.c
等位于
$(SRCDIR)
中,您也必须在这些文件前面加上目录。(或者,您不必为任何文件指定
$(SRCDIR)
,也不必稍后进行模式替换。)或者将它们放在单独的行上,每个行(最后一行除外)都以反斜杠结尾。我根据本文中的建议更改了行。但是,我仍然收到错误消息。在目录前加前缀的确切含义是什么?SRCS=$(SRCDIR)/Lab12.c$(SRCDIR)/Function1.c$(SRCDIR)/Function2.c$(SRCDIR)/Function3。c@JohnDoe当前位置如果回答了您的问题,请接受答案。您可以通过单击OznOg答案旁边的复选标记来接受答案。谢谢,欢迎来到StackOverflow!或者把它们分别放在不同的行上,除了最后一行之外,每一行都以反斜杠结尾。我根据这篇文章中的建议改变了这一行。但是,我仍然收到错误消息。在目录前加前缀的确切含义是什么?SRCS=$(SRCDIR)/Lab12.c$(SRCDIR)/Function1.c$(SRCDIR)/Function2.c$(SRCDIR)/Function3。c@JohnDoe当前位置如果回答了您的问题,请接受答案。您可以通过单击OznOg答案旁边的复选标记来接受答案。谢谢,欢迎来到StackOverflow!