Code :: Blocks不会生成目标文件

时间:2014-12-07 08:33:31

标签: c++ makefile linker sdl codeblocks

首先,我是一名初学程序员,所以请提供可以理解的简单答案。

我在起诉Code :: Blocks,我正在尝试用C ++创建一个多文件项目。我正在使用SDL2。我的问题是,当我完全放入我的所有代码和功能时,它们会运行,当我将它们分开时,它们就不会。这是因为执行文件需要构建它没有得到的目标文件。它没有得到它们,因为编译器不会形成它们。换句话说,链接存在问题。编译器简单地说,没有“.o”文件。这些文件在项目中作为“链接文件”而不是“编译文件”。当我将它们设置为“编译文件”以及“链接文件”时,它们会产生错误,我所提到的文件中的各种变量都没有声明。但是当我使用变量将该文件包含在文件中时,它会被深深嵌套。

以下是两种方式:

第一种不起作用的方式,使用单独的文件。

在main.cpp中:

    #include <SDL.h>
    #include <other.h>

    int var;
    int linkVar;
    int link1Var;
    int link2Var;

    #include "link.cpp"
    #include "link1.cpp"
    #include "link2.cpp"

    int main( int argc, char* args[] )
    {
      linkFunc();
      link1Func();
      link2Func();
    }

在link.cpp / link1.cpp / link2.cpp中:

    void linkFunc()/void link1Func()/void link2Func() //Just a reference
    {
      //Code associated with var, link1Var, link2Var and link3Var.
    }

第二种工作方式,所有功能都在一个文件中。

首先,我不想学习makefile的东西。如果有任何其他方法可以解决它,那就这样吧!

2 个答案:

答案 0 :(得分:1)

Code :: Blocks为每个文件创建目标文件,并将其编译为单独的编译单元。它将编译并链接作为项目一部分的任何文件,并将其标识为源文件。

首先,删除cpp文件的#includes。然后尝试Project > Add files...菜单选项将其他cpp文件添加到项目中。

答案 1 :(得分:0)

首先,你不应该在其他cpp文件上使用#include,你可以在这里阅读: include cpp

其次,当您尝试编译由单独文件组成的项目时,您应该使用g ++命令,如下所示:g++ main.cpp link.cpp link2.cpp etc' 您可以在此处阅读有关它的基本说明:use the g++ command

完全按照你的要求去做:

  

#摆脱包括任何cpp文件

     

#在你的主要函数之前使用属于其他cpp文件的任何函数的前向declerations:

void linkfunc();
void linkfunc2();
etc
.
.
. 
int main()
{
}
  

#指定.h文件的直接路径,如下所示:

#include <C:/MinGW/SDL2/SDL.h>
  

#使用此命令:

g++ -I C:/MinGW/SDL2/ main.cpp link.cpp link2.cpp link3.cpp