gpt4 book ai didi

c++ - 指定 netbeans 用于编译 C++ 程序的完整编译命令?

转载 作者:行者123 更新时间:2023-11-28 07:04:29 24 4
gpt4 key购买 nike

问题/目标我试图弄清楚如何完全控制 netbeans 编译命令,以便我可以将其更改为:

'g++ main.cpp foo.cpp bar.cpp'

到:

'g++ main.cpp -Wall'

原因如果我登录到终端并手动输入:'g++ main.cpp -Wall',我的程序将编译得很好。当我尝试使用 netbeans 进行编译时,我在控制台中看到它正在执行“g++ main.cpp foo.cpp bar.cpp”,但失败了,因为 main.cpp 已经在顶部包含了 foo.cpp 和 bar.cpp文件。我收到“文件/方法的多重定义”错误。

问题那么我将如何更改命令以使其仅在编译命令中包含 main.cpp 呢?更好的是,您如何手动指定整个命令字符串?

最佳答案

从你的解释来看,你一开始就做错了。当您有多个 cpp 文件时,您可以将它们中的每一个编译成一个目标文件,然后将它们链接在一起。使用#include 来包含 .cpp 文件是错误的做法——这就是头文件 (.h) 的用途。

头文件 (.h) 包含在 C++ 文件 (.cpp) 中定义的代码部分的声明。通过包含标题,您可以使用在别处定义的函数。其他地方可能是另一个目标文件(.o 或 .obj - 由 gcc -c something.cpp 创建)或库文件 (.lib)。当你有 3 个 cpp 文件时,a.cp​​p、b.cpp、c.cpp 并且它们都在使用彼此的函数,编译周期将是:

gcc -c a.cpp -> yields a.o
gcc -c b.cpp -> yields b.o
gcc -c c.cpp -> yields c.o

gcc -o program a.o b.o c.o -> yields program (executable)

或速记:

gcc a.cpp b.cpp c.cpp -o program

当b.cpp需要c.cpp中定义的函数时,b.cpp需要

#include <c.h>

其中c.h包含了b需要使用的函数声明。

当您在源代码中执行类似#include "b.cpp" 的操作时,它几乎总是完全错误。

关于c++ - 指定 netbeans 用于编译 C++ 程序的完整编译命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21974775/

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