gpt4 book ai didi

c - Makefile 未检测到依赖项更改

转载 作者:行者123 更新时间:2023-11-30 17:21:02 28 4
gpt4 key购买 nike

我有一个 Makefile 来帮助构建我的 C 项目 (GNU Make 3.82)。这只是一个片段:

OBJ = file1.o file2.o file3.o

prog: $(OBJ)
$(COMP) $(OPT) -o $@

$(OBJ): header.h

$(OBJ) 不需要在其后添加命令,因为 make 能够像在 Makefile 的其余部分中一样处理它。所有对象都依赖于这个头文件,因此如果我更改它,它们应该重新编译。然而他们不这样做。我的 Makefile 是基于这个 article .

注意:如果我为每个文件显式创建规则,它就会起作用,如下所示:

file1.o: header.h

<小时/>更新:我在 $(OBJ): header.h 行之后添加了一条 echo 语句,以查看 make 是否捕获了它但没有执行任何操作。不幸的是它也没有做任何事情。所以我猜这意味着整个依赖行由于某种原因无法工作。

<小时/>

这是我的完整 Makefile,以防我在某个地方搞砸了:

CC   = clang
OPT = -std=c99 -Wall -Wextra -g
LIBS = -lm
COMP = $(CC) $(OPT) $(LIBS)
EXEC = checker solver # Binary file(s)

OBJ = magic_check.o magic_io.o simple_checker.o

build: $(EXEC)
@echo "Building complete."

solver: checker simple_solver.o
$(COMP) simple_solver.o -o $@

checker: $(OBJ)
$(COMP) $(OBJ) -o $@

%(OBJ): magic_io.h
@echo "hello"

magic_check.o: magic_check.h
simple_checker.o: simple_checker.h magic_check.h
simple_solver.o: simple_solver.h

.PHONY: clean
clean:
rm -f checker solver *.o *~ core
@echo "Cleaning... :)"

rebuild: clean build
@echo "Rebuilding..."

最佳答案

我已经用 make 3.81 启动了旧的 debian,并且它完美地工作了(应该如此):

OBJ:=file1.o file2.o file3.o main.o
TARGET:=prog

$(TARGET): $(OBJ)
$(CC) -o $@ $(OBJ)

$(OBJ): test.h

结果:

# make
cc -c -o file1.o file1.c
cc -c -o file2.o file2.c
cc -c -o file3.o file3.c
cc -c -o main.o main.c
cc -o prog file1.o file2.o file3.o main.o
# make
make: `prog' is up to date.
# touch test.h
# make
cc -c -o file1.o file1.c
cc -c -o file2.o file2.c
cc -c -o file3.o file3.c
cc -c -o main.o main.c
cc -o prog file1.o file2.o file3.o main.o

我的示例和您的示例之间的区别在于,您的 %(OBJS) 具有 % 符号,而它应该具有 $ 符号。除此之外,“对我有用”。它也不应该包含任何命令(你的“回声”在这里并不是无害的)。

关于c - Makefile 未检测到依赖项更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28392847/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com