c - 在父目录中为源文件创建 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文件的经验。你能帮我纠正这个吗?
解决方案
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
推荐阅读
- javascript - 如何将动态创建的文本框值从 javascript 传递到 mvc 控制器
- c# - 用c#在2个sql server数据库之间进行数据翻译#
- machine-learning - 稀疏张量没有步幅
- xml - 明智地保存和读取更改的配置(存储在 XML 文件中)
- python - GitHub 上 Jupyter 笔记本中的目录
- node.js - 尝试重构 Express 路线
- android - 如何使用最新的 R8 Shrinker 版本
- git - 提交的作者应该如何处理历史重写(Git)的作者日期?
- sql-server - SQL Server 在将数据插入复合聚集主键时强制将 nvarchar 转换为 int
- webgl - WebGLError uniformMatrix4fv