gpt4 book ai didi

c++ - makefile 发布多个定义

转载 作者:太空狗 更新时间:2023-10-29 20:20:42 24 4
gpt4 key购买 nike

我正在学习如何使用 makefile,但是经过几个小时的研究后仍然卡住了,我无法解决我的 makefile 的问题:

output: main.o module.o
g++ main.o module.o -o output
main.o: module.cpp module.h
g++ -c module.cpp
module.o: module.cpp module.h
g++ -c main.cpp

我的 main.cpp 文件有 #include "module.cpp"我的 module.cpp 文件有 #include "module.h"

在尝试执行我的 makefile 后,我得到很多“多个定义”和“ undefined reference ”

帮助将不胜感激

p.s codeblocks 中的代码可以完美运行,这就是我如此困惑的原因。我正在使用 mingw32-make

最佳答案

您收到“多重定义错误”,因为您将 module.omain.o 链接在一起,但您的 main.cpp 已经包括 module.cpp。不要在 main.cpp 中包含 module.cpp(即:删除 main.cpp 中的 #include "module.cpp 指令)。由于 main.o 将不再依赖于 module.cpp,因此您应该从 main.o 中删除该先决条件> 规则也是如此。

另外,考虑使用 GNU Make 的 automatic variables代替硬编码文件名和预定义变量(即:CXX)代替硬编码命令(即:g++):

output: main.o module.o
$(CXX) $^ -o $@

main.o: main.cpp module.h
$(CXX) -c $<

module.o: module.cpp module.h
$(CXX) -c $<

或者更好的是,依靠预定义的模式规则从 .cpp 文件生成 .o 文件:

output: main.o module.o
$(CXX) $^ -o $@

main.o: module.h
module.o: module.h

请注意,未能提供最后两行将导致 main.omodule.o 仍然是最新的 (即:不被重建)即使 module.h 改变了。

关于c++ - makefile 发布多个定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49147574/

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