[英]Specifying the full compile command that netbeans uses to compile a C++ program?
问题/目标我试图找出如何完全控制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。文件。 我收到“文件/方法的多个定义”错误。
问题那么我将如何更改命令,使其仅在compile命令中包含main.cpp? 更好的是,如何手动指定整个命令字符串?
从您的解释来看,您首先做错了。 如果有多个cpp文件,则可以将每个文件编译为一个目标文件,然后将它们链接在一起。 使用#include包含.cpp文件是错误的方法-那就是标题(.h)文件的作用。
头文件(.h)包含在C ++文件(.cpp)中定义的代码部分的声明。 通过包含标题,您可以使用在其他地方定义的函数。 在其他地方可能是另一个目标文件(.o或.obj-由gcc -c something.cpp创建)或库文件(.lib)。 当您拥有3个cpp文件(a.cpp,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>
其中ch包含b需要使用的函数的声明。
当您在源代码中执行#include "b.cpp"
时,几乎总是完全错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.