【发布时间】:2021-04-15 17:46:01
【问题描述】:
我的目录结构如下:
- 生成文件
-
binmain.c Makefile -
库
lib1.c lib2.c Makefile -
tst
test1.cc Makefile
-
在我的 Makfile 中,我的代码如下所示:
ALL_OBJECTS = main.o lib1.o lib2.o
BINS = binary
binary,SRCS = main.o lib1.o lib2.o
OBJS = $($(*),SRCS)
all: $(ALL_OBJECTS) $(BINS)
%.o : %.c
${CC} -c $^ -o $@
binary:
${CC} -o $@ $(OBJS)
我的问题是,当我更改 main.c、lib1.c 或 lib2.c 等源文件时,*.o 文件会在 make 期间重新编译,但二进制文件不会重新编译。当其中一个依赖项发生更改时,如何确保重新编译二进制文件?
【问题讨论】:
-
可能不是您想要的答案,但如果您想做任何不平凡的事情,请使用 Cmake 或类似的东西,而不是自己构建 Makefile。 Here 是我写的相关答案
-
你的二进制文件不依赖 .o 对象
-
@klutt:根据我的经验,CMake 是个坏主意,除非你真的需要它提供的跨平台功能,否则需要大量额外的工作。
-
没有我可以创建的 .d 文件来概述二进制文件的依赖关系吗?
-
回复。
"Is there not a .d file I can create which outlines the dependencies for the binary?":据我所知没有。.d文件通常包含目标文件对源文件和头文件的依赖关系,并且可以由编译器生成(例如,参见 here)。但是需要手动指定链接器依赖项(我很想被证明是错误的)。