Eclipse 4.4.1 (Luna) for C/C++ Programming

Eclipse 4.4.1 (Luna) for C/C++ Programming

目录


Eclipse是一个开源的集成开发环境 (IDE)。官网在这儿。Eclipse主要用来做Java开发。它也可以通过插件的方式支持C/C++, PHP, Python, Perl, 以及其他web项目的开发。Eclipse同时也是跨平台的开发环境,可以运行在Windows, Linux和Mac OS下。

查看英文原文


Eclipse 4.4.1 (Luna)安装C/C++ Development Tool(CDT)


  • Step 0: 安装 MinGW GCC 或者 Cygwin GCC

    想用Eclipse来做C/C++开发,首先得需要一个C/C++编译器。在Windows上,需要安装 MinGW GCC 或者 Cygwin GCC。如果不确定该选哪儿款,就选MinGW吧,因为它更轻量级,更容易安装,不过所支持的特性也就少点儿了。

    1. MinGW GCC: 阅读 MinGW 安装指南
    2. Cygwin GCC: 阅读 Cygwin 安装指南。确保在安装的时候,在 Devel(Development) 目录下选中 gcc, g++, gdb以及make 这些包,因为默认安装是没有选中这些包的。
  • Step 1: 安装 Eclipse C/C++ Development Tool (CDT)

    有两种方式安装CDT,取决于本机上之前是不是安装过Eclipse:

    1. 如果之前安装过 Eclipse for Java Developers 或者其他的Eclipse安装包,那么你需要安装CDT插件,如下

      打开 Eclipse => Help => Install New Software => 在 Work with 的下拉框的下拉菜单里选择 Luna - http://download.eclipse.org/releases/luna (或者 Eclipse 4.3 选择 Kelper; 或者 Eclipse 4.2 选择 juno; 或者 Ecplise 3.7 选择 helois)。
      Name 复选框中展开 Programming Language => 选中 C/C++ Development Tools => 一路 Next => Finish.

    2. 如果之前没有安装过任何 Eclipse,那么可以在这里下载 Eclipse IDE for C/C++ Developers,然后解压到选择的文件夹。

  • Step 2: 配置

    只要 Cygwin 或者 MinGW 的 bin 文件夹处在系统的 PATH 环境变量中就够了,无需其他任何配置。CDT会通过搜索 PATH 找到 C/C++ 编译器。


在 Eclipse 中编写第一个 C/C++ 程序


C++ 程序

  • Step 0: 打开 Eclipse

    1. 在 Eclipse 安装目录运行 eclipse.exe
    2. 为你的工作空间选择合适的目录 (也就是你想把代码放在哪里)
    3. 如果 welcome 字样出现,点击 close 关闭
  • Step 1: 创建 C++ 工程

    对每个C++应用来说,都需要创建一个工程来保存所有的source codes (源代码), object files (.o 文件), executable files (可执行文件) 以及 relevant resources (资源文件)。
    创建 C++ 工程的步骤:

    1. 选择 File 菜单 => New => Project… => C/C++ => C++ project
    2. 弹出 C++ Project 对话框 =>
      Project name 框内输入 FirstProject =>
      Project Types 复选框内, 选择 Executable => Empty Project =>
      Toolchains复选框内, 选择编译器,比如 Cygwin GCC 或者 MinGW GCC => Next
    3. 弹出 Select Configurations 对话框,选中 DebugRelease => Finish.
  • Step 2: 编写一个 Hello-world C++ 程序

    1. Project Explorer (最左边的面板) 中 => FirstProject 右键(或者 点击 File 菜单) => New => Source File
    2. 弹出 New Source File 对话框
      1. Source File 框内,输入Hello.cpp
      2. 点击 Finish
    3. 源文件 Hello.cpp 出现在了编辑面板中。输入以下代码:
#include <iostream>
using namespace std;

int main() {
   cout << "Hello, world!" << endl;
   return 0;
}
如果发生 Unresolved Inclusion Error

如果出现 Unresolved Inclusion Error,说明 include paths for headers 没有设置正确。
选中 Project 菜单 ⇒ PropertiesC/C++ GeneralPaths and Symbols ⇒ 在 Includes 选项卡中:

  • 对于 Cygwin GCC :

    1. Add 以下目录到 GNU C 下,$CYGWIN_HOME 是 Cygwin GCC 安装目录:
      • $CYGWIN_HOME\lib\gcc\i686-pc-cygwin\4.5.x\include
      • $CYGWIN_HOME\lib\gcc\i686-pc-cygwin\4.5.x\include-fixed
      • $CYGWIN_HOME\usr\include
      • $CYGWIN_HOME\usr\include\w32api
    2. Add 以下目录到 GNU C++ 下,$CYGWIN_HOME 是 Cygwin GCC 安装目录:
      • $CYGWIN_HOME\lib\gcc\i686-pc-cygwin\4.5.x\include\c++
      • $CYGWIN_HOME\lib\gcc\i686-pc-cygwin\4.5.x\include\c++\i686-pc-cygwin
      • $CYGWIN_HOME\lib\gcc\i686-pc-cygwin\4.5.x\include\c++\backward
      • $CYGWIN_HOME\lib\gcc\i686-pc-cygwin\4.5.x\include
      • $CYGWIN_HOME\lib\gcc\i686-pc-cygwin\4.5.x\include-fixed
      • $CYGWIN_HOME\usr\include
      • $CYGWIN_HOME\usr\include\w32api
  • 对于 MinGW GCC :

    1. Add 以下目录到 GNU C 下,$MINGW_HOME是 MinGW GCC 安装目录:
      • $MINGW_HOME\lib\gcc\mingw32\4.6.x\include
      • $MINGW_HOME\include
      • $MINGW_HOME\lib\gcc\mingw32\4.6.x\include-fixed
    2. Add 以下目录到 GNU C++ 下,$MINGW_HOME是 MinGW GCC 安装目录:
      • $MINGW_HOME\lib\gcc\mingw32\4.6.x\include\c++
      • $MINGW_HOME\lib\gcc\mingw32\4.6.x\include\c++\mingw32
      • $MINGW_HOME\lib\gcc\mingw32\4.6.x\include\c++\backward
      • $MINGW_HOME\lib\gcc\mingw32\4.6.x\include
      • $MINGW_HOME\include
      • $MINGW_HOME\lib\gcc\mingw32\4.6.x\include-fixed

注意: 为了找到头文件的路径,需要在 Cygwin 或者 MinGW 安装目录下搜索一下类似 stdio.h (C) 以及 iostream (C++)这样的头文件。

注意: 如果在 链接 (link) 时加载共享库出现 error while loading shared libraries 错误,请在 cygwin 中安装libmpfr4

  • Step 3: Compile/Build

    Project Explorer (最左边的面板) 中 => FirstProject 右键(或者 点击 Project 菜单) => 选择 Build Project 编译链接整个程序 。

  • Step 4: Run

    Project Explorer (最左边的面板) 中 => FirstProject 右键(或者 点击 Run 菜单) => Run As => Local C/C++ Application => (如果弹出提示, 选择 Cygwin’s gdb debugger) ⇒ 在 Console 面板,输出了结果 Hello, world!

注意: 你需要给每一个程序都创建一个C++工程。这对于玩具程序(指平时写的小程序)来说,比较烦!


C 程序

与上面的步骤相似,创建一个 C Project (而不是 C++ Project)。然后编译链接运行 Hello - world 程序 (Hello.c)。

#include <stdio.h>

int main() {
   printf("Hello, world!\n");
   return 0;
}

C++ Program with Makefile

在之前的例子中,我们使用的是所谓的 managed-make 方式来 build 程序 (这种方式下 Eclipse 会自动生成一个 makefile)。我们也可以自己手动编写 makefile 来控制整个的构建 (build) 过程。

  • Step 1: 创建一个 C++ Makefile 工程

    File菜单 ⇒ NewProject…C/C++C++ projectProject name框内, 输入HelloCppMakefile ⇒ 在Project type框内, 选择Makefile Project, Empty ProjectToolchains框内, 选择Cygwin GCC 或者 MinGW GCC。 忽略警告信息。

  • Step 2: 编写一个 C++ 程序

    右键一个工程 => NewSource File ⇒ 在Source file框内, 输入Hello.cpp ⇒ 输入以下代码:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello, world!" << endl;
    return 0;
}
  • Step 3: 编写Makefile

    右键一个工程 => New => File => File name 框下,输入 makefile => 输入以下代码。值得注意的是,缩进必须用 Tab 而不是 Spaces

all: Hello.exe

clean:
    rm Hello.o Hello.exe

Hello.exe: Hello.o
    g++ -g -o Hello.exe Hello.o

Hello.o: Hello.cpp
    g++ -c -g Hello.cpp
  • Step 4: Build 工程

    右键工程 ⇒ Build Project

  • Step 5: Run the Program

    右键工程 ⇒ Run AsLocal C/C++ Application

[未完成] 为一个工程下的若干个玩具程序编写一个makefile


阅读文档


至少,你应该通过 Eclipse 的 Welcome 页面或者 Help 菜单浏览 Eclipse的 Workbench User GuideC/C++ Development User Guide。这将会避免日后很多恼人的问题,节省您很多宝贵的时间。


Eclipse CDT中调试 C/C++ 程序


学会在在有图形界面的调试器中调试程序是一项很重要的技能。它会节省您非常多的时间,让您不用去猜测哪里出Bug了。

  • Step 0: 编写一个 C++ 程序

    下面这个程序计算并打印出 n 的阶乘 (=1*2*3*…*n)。但是,这个程序有一个逻辑错误,当 n = 20 的时候会得出一个错的值 (“The Factorial of 20 is -2102132736” - 你确定?一个负数?!”)

#include <iostream>
using namespace std;

int main() {
   int n = 20;
   int factorial = 1;

   // n! = 1*2*3...*n
   for (int i = 1; i <= n; i++) {
      factorial *= i;
   }
   cout << "The Factorial of " << n << " is " << factorial << endl;
   return 0;
}

// output
The Factorial of 20 is -2102132736

我们使用使用调试器来调试这个程序。

  • Step 1: 设置断点

    EclipseCppDebugSetBreakpoint

    断点可以让程序在次数悬挂住而不往下执行,这样你就可以检查程序的内部状态(比如,变量的值等等)。在开始调试之前,你需要在程序中设置至少一个断点。双击编辑面板的左侧空白栏就可以打断点了。一个蓝色的小圈圈就表示断点成功设置了。

  • Step 2: 开始调试

    右键工程 (或者点击 Run 菜单) ⇒ Debug AsLocal C/C++ Application ⇒ 选择 Yes 来切换到 Debug 视图 (视图 是为了方便某个特定的开发任务,比如编辑或者调试,而对工具面板进行也定的排版)。 程序开始运行,然后在断点处暂停。
    如下图所示,高亮行(蓝色箭头所指的行)表明了下一步所要执行的语句。
    EclipseCppDebugStart

  • Step 3: 单步执行,查看变量和输出

    点击 Step Over (单步执行)按钮 (或者选择 Run菜单下的 Step Over) 进行单补运行。每执行一步,检查变量的值 (在 Variable 面板里) 和程序的输出结果 (在 Console 面板里) , 如果需要的话,你可以把鼠标放在任何变量上,看一看变量的内容。
    单步执行,查看变量和输出这种方式是程序调试的终极奥义 - 因为它精确显示了程序在电脑上是怎么跑的。

  • Step 4: Breakpoint, Run-To-Line, Resume and Terminate

    EclipseJavaDebugToolbar

    如前所述,断点暂停了程序的运行并且让你检查程序的内部状态。双击某行左边的空白栏就可以设置断点 (或者是在 Run 菜单下选择 Toggle Breakpoint)。

    Resume 让程序继续运行,直到下一个断点,或者程序的结尾。
    在一个大数量级的循环里单步执行是很耗时间的,此时你可以在循环的外面设置一个断点,然后点击 Resume 来结束循环。

    或者,你可以把光标放在一行特别的语句上,然后在Run 菜单点击 Run-To-Line,让程序直接运行到此行。

    Terminate 按钮结束本次调试. 尽量每次都通过 Terminate 或者 Resume 到程序结尾的方式来结束本次调试。

  • Step 5: 切回 C/C++ 视图

    点击右上角的 C/C++ 视图图标切回 C/C++ 视图 (或者 Window 菜单 ⇒ Open PerspectiveC/C++).

    一句话,调试很重要,去探索调试器的更多特性吧!

  • Other Debugger’s Features

    EclipseCppDebugVariables

    修改变量值: 可以在 Variable 面板里输入新的值来修改变量值。在不修改源代码的情况下,这种暂时修改程序表现的方式还是很方便的。

    Step-Into and Step-Return: 为了对函数进行调试, 你需要使用 Step-Into 按钮进入函数的第一个语句。也可以使用 Step-Return 按钮在函数的任何位置退出函数,返回到调用者。而且,也可以在函数内部设置断点。

注意: 如果在调试过程中,出现了Can’t find a source file at /cygdrive/c…, 那么需要在/cygdrive/cc:/之间做一个映射 (假设你的程序在 c 盘下):
WindowPreferencesC/C++DebugCommon Source Lookup Path, 选中 AddPath Mapping


Eclipse 使用技巧


请阅读 Java版本的Eclipse 使用技巧。都差不多。

使用 GCC 进行 C/C++ 开发

  • 可以在 $workspace\.metadata\.plugins\org.eclipse.cdt.ui\global-build.log 下查看 Eclipse CDT 中用于 build工程的命令。

  • 设置include-paths, library-paths, libraries: 当 build(构建) 一个程序的时候,编译器需要头文件来编译源文件; 链接器需要库文件来解析外部引用。编译器搜索 include-paths 来寻找 #include 指令包含的头文件。链接器搜索 library-paths 来寻找程序需要的 libraryies (库).

    在GCC中,include-path 会通过 -Idir 选项或者环境变量 CPATH 来指定。 library-path 会通过 -Ldir 选项或者环境变量 LIBRARY_PATH 来指定。库文件 libxxx.a 通过 -lxxx 选项来指定(小写字母 ‘l’, 没有 lib 前缀和 .a 扩展名)

    在Eclipse CDT中, 你可以设置 include paths, library pathslibraries

    右键工程PropertiesC/C++ GeneralPaths and Symbols ⇒ 在 Includes , Library PathsLibraries 选项卡下,这个设置仅对选中的工程有作用。

    如果想设置所有项目的 include pathslibrary paths,设置环境变量 CPATH LIBRARY_PATH

    选择 Window 菜单 ⇒ PreferencesC/C++BuildEnvironment.

    另外, 你也可以把头文件和库文件拷贝到 系统(system) 目录下,这样你就可以不用管include-pathslibrary-paths了。

  • OpenGL with GLUT: 对于Cygwin, 你需要安装 gcc, g++, gdb, make (在 Devel 目录下) 以及opengl, freeglut (在 graphics 目录下). 头文件 gl.h, glu.h, glut.h 均在 $cygwin\usr\include\w32api\GL 下. 使用#include <GL/gl__.h>包含头文件 . 库文件 libopengl32.alibglu32.a 以及 libglut32.a 均在 $cygwin\lib\w32api 中. 为了在链接时使用这些库,使用 -lopengl32 -lglu32 -lglut32 选项(不需要 lib 前缀 和 .a 扩展名).

  • OpenGL with SDL: 从这里下载SDL . 选择 Development Librarieswin32mingw32Unzip. 拷贝 头文件目录 SDL (在 include 目录下)到 $cygwin\usr\include\w32api; 拷贝 lib 目录下的所有库文件到 $cygwin\lib\w32api; 拷贝运行时库文件 SDL.dll (在 bin 目录下)到 Windows/System32。在你的程序中,包含以下两个头文件: #include \<SDL/sdl.h\>#include <SDL/sdl_opengl.h>

    为了链接通过,添加以下两个库: -lSDL -lSDLmain.

  • #pragma 注释指令: pragma 注释指令, 比如, #pragma comment(lib, “opengl32.lib”), 常常用来包含特定的库 (与 -l 选项功能一样)。这个依赖具体平台的指令在 Windows机器上可用,但是在 GCC 不能用。

  • multiple target patterns 错误信息: GNU make ($Cygwin\bin\make.exe) 有问题. 用这个代替覆盖。

  • fflush(stdout): gcc的库使用了缓存的I/O (与 C 的规范一致)。只有在一个换行符只有,输出才会被写到输出流。可以使用 fflush() 函数是立刻刷新缓存,写入输出流。

  • 工程名不应该含有 “setup”: 如果你的C/C++工程名含有 setup 这个词,那么生成的结果文件 ***setup***.exe会触发 UAC (User Authorization Control),并且需要管理员的权限来运行(这花了我好几个小时才弄清楚!可以试下把 hello.exe 改成 mysetup.exe)。


Eclipse 中的File I/O

请阅读 Java版本的Eclipse 中的File I/O


参考资料

  1. Eclipse的 C/C++ Development Tool User Guide, 通过 Eclipse的 Help 菜单可以看到.
  2. GCC (GNU compilers) 官网 ; GCC 手册
  3. An Introduction to GCC
posted @ 2016-06-18 10:42  1202zhyl  阅读(362)  评论(0编辑  收藏  举报