C++ 使用makefile链接不同目录中的.h文件和.c文件

C++ 使用makefile链接不同目录中的.h文件和.c文件,c++,c,makefile,linker,C++,C,Makefile,Linker,我正试图用um.c从当前文件夹编译一个名为um的程序 并包括一些外部实现。.h文件位于一个目录中,但实现这些.h文件的.c文件位于不同的目录中。下面是我的makefile。编译器似乎知道在哪里查找.h文件。但是,链接器失败并产生错误: ld: symbol(s) not found for architecture x86_64 clang: fatal error: linker command failed with exit code 1 生成文件: # define the C com

我正试图用um.c从当前文件夹编译一个名为um的程序 并包括一些外部实现。.h文件位于一个目录中,但实现这些.h文件的.c文件位于不同的目录中。下面是我的makefile。编译器似乎知道在哪里查找.h文件。但是,链接器失败并产生错误:

ld: symbol(s) not found for architecture x86_64
clang: fatal error: linker command failed with exit code 1
生成文件:

# define the C compiler to use
CC = gcc

# define any compile-time flags
CFLAGS = -g -O -Wall -Wextra -Werror -Wfatal-errors -std=c99 -pedantic

# define any directories containing header files other than /usr/include
INCLUDES = -I/Users/nguyenmanhduc/Documents/C\ library/cii/include

# define library paths in addition to /usr/lib
LFLAGS = -L/Users/nguyenmanhduc/Documents/C\ library/cii/src

# define any libraries to link into executable:
LIBS = -lm

# define the C source files
SRCS = um.c

# define the C object files 
OBJS = $(SRCS:.c=.o)

# define the executable file 
MAIN = um

.PHONY: depend clean

all:    $(MAIN)
    @echo  Simple compiler named um has been compiled

$(MAIN): $(OBJS) 
    $(CC) $(CFLAGS) $(INCLUDES) -o $(MAIN) $(OBJS) $(LFLAGS) $(LIBS)

.c.o:
    $(CC) $(CFLAGS) $(INCLUDES) -c $<  -o $@

clean:
    $(RM) *.o *~ $(MAIN)

depend: $(SRCS)
    makedepend $(INCLUDES) $^
#定义要使用的C编译器
CC=gcc
#定义任何编译时标志
CFLAGS=-g-O-Wall-Wextra-Werror-Wfatal errors-std=c99-pedantic
#定义包含除/usr/include以外的头文件的任何目录
INCLUDES=-I/Users/nguyenmanhduc/Documents/C\library/cii/include
#定义除/usr/lib之外的库路径
LFLAGS=-L/Users/nguyenmanhduc/Documents/C\library/cii/src
#定义要链接到可执行文件的任何库:
LIBS=-lm
#定义C源文件
SRCS=um.c
#定义C对象文件
OBJS=$(SRCS:.c=.o)
#定义可执行文件
MAIN=um
.虚假:依赖清洁
全部:$(主)
@已编译名为um的echo简单编译器
$(主):$(OBJS)
$(CC)$(CFLAGS)$(包括)-o$(主)$(OBJS)$(LFLAGS)$(LIBS)
.c.o.:
$(CC)$(CFLAGS)$(包括)-c$<-o$@
清洁:
$(RM)*.o*~$(主)
依赖:$(SRC)
MakeDependent$(包括)$^
这个问题可能看起来很奇怪,因为我对makefile没有什么经验,但有没有一种方法可以使用makefile链接不同文件夹中的.h和.c文件


谢谢

这里的问题不是你的附加
.c
文件在不同的目录中:而是你根本没有告诉你的Makefile它们存在

这里是您列出源输入的地方(我猜您没有看到注释?)

添加其他
.c
文件,这些文件的编译后的
.o
是您想要链接的

例如:

# define the C source files
SRCS = um.c ../wot.c ../hah/lol.c

没有硬性规定,但是,按照您构建此Makefile的方式,这些相对路径应该可以很好地解析。

您不链接
.c
文件,而是链接
.o
文件

您似乎在说明您的一些
.c
文件位于不同的目录中

不管怎样,您必须在makefile中显式列出那些
.c
文件,就像您在makefile所在的目录中列出
.c
文件一样。您必须编译不同目录中的
.c
文件,然后链接它们,就像编译和链接makefile所在目录中的
.c
文件一样。他们不会自己编译

另一种方法是在另一个目录中有一个单独的makefile,它编译并构建一个存档库,然后在这个目录中与该存档库链接

# define the C source files
SRCS = um.c ../wot.c ../hah/lol.c