gpt4 book ai didi

c++ - 关于我的简单 Makefile 的问题

转载 作者:行者123 更新时间:2023-11-28 02:39:12 25 4
gpt4 key购买 nike

下面是我的 Makefile 的拷贝。我有几个问题我的项目是 here

CXX = g++
CXXFLAGS = -Wall -g

test: car.o student.o house.o main.o
$(CXX) $(CXXFLAGS) -o test main.o car.o student.o house.o

main.o: student.h house.h main.cpp
$(CXX) $(CXXFLAGS) -c main.cpp

car.o: car.h

student.o: student.h car.h

house.o: house.h

clean:
rm -rf main.o car.o student.o house.o test

现在这是我的问题:

问题一:我对隐式 Makefile 规则有点困惑。为什么即使我替换 Makefile 也能正常工作

  main.o: student.h house.h    main.cpp

清理干净后用这个

  main.o: main.cpp

有人可以澄清一下吗。

问题二:如果 test 目标的依赖顺序发生变化,这有关系吗(我尝试了一些但没有)。专家的确认会有所帮助。

test:  car.o student.o   house.o main.o

问题 3:当依赖项是没有命令的头文件时会发生什么,例如这个

student.o: student.h car.h

更新:运行 make -p 后,这是我得到的一部分

house.o: house.cpp house.h
# Implicit rule search has been done.
# Implicit/static pattern stem: `house'
# Last modified 2014-10-24 01:28:16.992760877
# File has been updated.
# Successfully updated.
# automatic
# @ := house.o
# automatic
# % :=
# automatic
# * := house
# automatic
# + := house.cpp house.h
# automatic
# | :=
# automatic
# < := house.cpp
# automatic
# ^ := house.cpp house.h
# automatic
# ? := house.cpp house.h
# variable set hash-table stats:
# Load=8/32=25%, Rehash=0, Collisions=2/20=10%
# recipe to execute (built-in):
$(COMPILE.cpp) $(OUTPUT_OPTION) $<

我不明白这是什么意思

最佳答案

您删除了之前关于此事的问题;即使您对其结果不满意,这种体验也可能对其他 StackOverflow 用户有用。请考虑将该问题重新在线。

问题一:由于没有更新依赖,所以Makefile可以正常运行。请记住,Makefile 为初始构建和后续重建提供服务,加快了后者的速度,因为它只查看已更改的文件。在您的示例中,您最初表示 main.o 依赖于几个头文件。然后你删除了两个依赖项。在你的软件开发周期中,你的头文件会被更改,如果在下一个make时没有表达依赖关系,那么main.o将不会相应更新。这是一个简单的例子,但它对大型软件项目有很大的影响,因为目标文件停留在旧版本中。

问题 2:不是在小型项目中。在大型项目中,第一个指定的目标文件可能包含一个符号,表明第二个指定的目标文件需要正确链接;所以完整的答案是:不是在小项目中,但最好在未来的项目中习惯它。

问题 3:目标顺序无关紧要。

问题 4:回声在依赖项之后:

test:  car.o student.o   house.o main.o
echo "This is the test"
$(CXX) $(CXXFLAGS) -o test main.o car.o student.o house.o

关于c++ - 关于我的简单 Makefile 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26541007/

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