【发布时间】:2020-10-11 21:46:51
【问题描述】:
---src
---U
---B
---D
---L
---T
---F
main.c
Makefile
我在 main.c 中编写了一个程序,它需要一个位于目录 L/ 内的自定义头文件。头函数的实现存在于 L/ 中的源文件 (src.c) 中。
源文件 src.c 又依赖于与 src.c 或其他顶级目录位于同一目录中的其他自定义源文件和头文件。
我想在 F/ 中编写一个 MakeFile,以便能够根据需要选择那些源文件和头文件并创建一个二进制文件。
我无法编辑/使用现有的 make 文件,因为此过程需要与现有的文件分离,并且还需要单独的工具链和 CFLAGS。
我阅读了有关 VPATH 的信息,但我无法使我的构建工作。
Following MakeFile 不工作,并抱怨找不到 x.o 和其他目标文件。
all: prog
CC = clang-11
CFLAGS= -g -fsanitize=fuzzer
#INCLUDES = -I../../../../../B
INC = $(INCLUDES)
OBJS = x.o qc.o dl.o l.o d.o
LIBS = -lcrypto -luuid
prog: $(OBJ)
$(CC) $(CFLAGS) $(INC) -o prog $(OBJS) $(LIBS)
x.o: x.c //do I need to specify other header file dependencies here?
$(CC) $(INC) -g -c -o x.o x.c
qc.o: qc.c
$(CC) $(INC) -g -c -o qc.o qc.c
dl.o: dl.c
$(CC) $(INC) -g -c -o dl.o dl.c
l.o: l.c
$(CC) $(INC) -g -fsanitize=fuzzer -c -o l.o l.c
d.o: d.c
$(CC) $(INC) -g -c -o d.o d.c
clean:
rm -f *.o prog
我没有编写 make 文件的经验。你能帮我纠正一下吗?
【问题讨论】:
-
你真的要写一个makefile吗?改用 cmake 怎么样?
-
如果我们不知道 x.c 和其他源文件的位置,很难修复 makefile。可以使用 VPATH,在这种情况下,它需要源文件所在的目录列表。但是,VPATH 在这里不是强制性的。你需要写下源文件的相对路径../../T/source.c,这样make才能找到。
-
提示:要将源文件转换为目标文件,您可以执行以下操作:`$(SRC:.c=.o)`