繁体   English   中英

使用 makefile 链接来自不同目录的 .h 文件和 .c 文件

[英]Link .h files and .c files from different directory using makefile

我正在尝试使用 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) $^

这个问题可能看起来很奇怪,因为我对 makefile 几乎没有经验,但是有没有一种方法可以使用 makefile 链接不同文件夹中的 .h 和 .c 文件。

谢谢!

这里的问题不在于你额外.c文件在不同的目录中:那就是你没有告诉你的Makefile,他们存在!

这是您列出源输入的地方(我猜您没有看到评论?):

# define the C source files
SRCS = um.c

添加其他.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,用于编译和构建存档库,然后在该目录中与该存档库链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM