首页 > 解决方案 > 在父目录中为源文件创建 Makefile

问题描述

---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 的信息,但我无法使我的构建工作。

以下 MakeFile 不起作用,并抱怨找不到 xo 和其他目标文件。


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文件的经验。你能帮我纠正这个吗?

标签: cmakefile

解决方案


x.o: x.c  //do I need to specify other header file dependencies here?
    $(CC) $(INC) -g -c -o x.o x.c

不需要更多依赖,但需要提供文件的相对路径。例子:

x.o: ../../D/x.c  //do I need to specify other header file dependencies here?
    $(CC) $(INC) -g -c -o x.o ../../D/x.c

建议:简化你的树,它太复杂了。

Folder
  src
  inc
  doc

用于VPATH

它主要用于从源目录中拆分二进制目录。在这种情况下,你有类似的东西:

OBJS = bin/a.o bin/b.o

VPATH = src

当 GNU Make 尝试创建 ao 时,它会找到 src/ac


推荐阅读