Effective Eclipse CDT (二)

Project Configuration

上篇介绍的全局配置会作为每个工程的默认配置,所以像代码风格之类的配置,如果工程没有特殊需要一般不用再配置。工程属性里面主要关注于工程的构建选项。只要配置好了各种构建参数,就可以通过eclipse来构建工程,这时工程代码也能够被eclipse正常解析(对于我个人,更加喜欢用脚本构建,在eclipse里进行工程配置主要是为了让其能够正确解析代码)。

新建工程

通过File -> New -> C++ Project来创建一个新的C\++工程。如下图,eclipse支持创建几种不同类型的工程;

对上图中的元素说明如下:

  • Project name : 工程名。

  • Use default location : 勾选此项的话,项目默认创建在eclipse workspace目录下;如果不勾选,那么在Location处可以选择项目位置。如果你已经有了项目目录,想要直接把eclipse工程文件创建在自己的代码目录里,就选择后者。

  • Project Type:可以选择构建的工程类型

    • GNU Autotools:该类项目默认选择用GUN Autotools进行构建管理,eclipse不会为其自动生成makefile。在项目的属性对话框里面将会有一个对GNU Autotools的配置页面。

    • Executable:可执行项目,eclipse默认会为其生成makefile。该类工程允许在工程属性对话框里面深入配置各种编译链接参数,这些配置的修改都会决定自动生成的makefile内容。Empty ProjectHello World C++ Project的区别在于后者会自动为项目创建一个src目录以及一个实现了输出“hello world”的cpp文件。

    • Makefile Project:该类工程默认用户使用自定义的makefile,不会为项目自动创建makefile。该类工程的工程属性对话框里面默认不可以对编译、链接参数进行配置,它会使用用户makefile中的参数进行项目解析。

    • Shared Library:共享库工程。默认项目的构建结果为共享库,在工程属性里面会有对共享库的各种构建配置选项;

    • Static Library:静态库工程。默认项目的构建结果为静态库,在工程属性里面会有对静态库的各种构建配置选项;

  • Toolchains:工具链。该对话框里eclipse会自动识别系统安装的工具链。例如如果你安装了cygwin或者minGW的工具链,也会显示在这里以供选择。如果使用Linux下默认的工具链,则选择Linxu GCC。如果选择Cross GCC,说明项目是交叉编译,那么工程属性对话框里面需要进行交叉工具链的各种配置。

导入工程

如果工程已经有了eclipse项目文件,那么可以直接导入到eclipse中。

选择File -> import -> General -> Existing Projects info Workspace, 然后下一步,在接下来的对话框里面选择eclipse项目文件所在的目录,然后确认,将其导入eclipse中。

配置工程

对于创建好的eclipse工程,可以在工程属性对话框里对其进行更为详细的配置。在Project Explorer视图里的具体工程上点右键,选择Properties

在工程属性对话框里面,最为重要的是C/C++ Build以及C/C++ General这两个配置集。这两个配置集包含所有和工程构建相关的配置。如果你要用eclipse进行构建,那么这里面的东西就极为重要,因为它决定了项目能否被正确构建。如果你有自己的构建脚本,这里面的东西仍然极为重要,因为它决定了项目代码能否被eclipse正确解析!

C/C++ Build配置集

在工程属性对话框中选择C/C++ Build对构建进行配置:

  • Configuration: 这里可以设置构建目标。Executable类型的工程,默认有DebugRelease两种构建目标可以选择,Makefile类型的工程只有一个Default目标。你可以分别配置每一类目标下的编译构建参数。每种构建目标的编译链接参数一般为了不同目的而配置。例如一般在Debug目标下我们在配置编译参数时会选择不打开优化选项,但是会设置为目标文件构建debug信息;而Release目标的构建参数则选择不构建debug信息,但是需要打开对应的编译优化选项。构建目标后面的[Active]指eclipse默认选择的构建配置(当按快捷键Ctrl + b进行构建时)。点击后面的Manage Configurations...可以对构建目标进行增加、删除和修改。如下图新增了一种构建目标build,将其设为active。
  • Builder Settings:

    • Builder type:

      • External builder:选择可以使用外部构建工具进行构建。选中此选项后,底下就可以进行更多的配置。例如可以将Use default build command的勾去掉,然后将Build command从默认的make改为其它自定义工具或者脚本(如果你想使用项目已有的构建脚本,就在此处更改)。另外,可以将Generate Makefiles automatically去掉,手动填写构建目标产物的位置。如下图示例,将构建命令修改为使用项目根目录下的build.sh脚本,将构建结果放在项目根目录下的build目录下。

        external-build.png

      • Internal type:选择使用eclipse的默认构建工具进行构建,所谓默认构建工具就是在创建工程时所选择的工具链。一旦选择Internal type,那么底下的选项就不能再修改了。例如下图选择Internal type,则eclipse固定使用make进行构建,并强制自动生成makefile。

    • Makefile generaton : 配置eclipse是否自动产生makefile。如果工程类型是executable,这里默认是勾选状态;否则默认是不勾选的。只有这里勾选了让eclipse自行产生makefile,工程属性里面才会出现配置编译器、链接器参数的对话框,否则是看不见的(具体在Project properties -> C/C\\++ Build -> Settings)。

    • Build location:设置构建产物的位置。默认在工程根目录下的第一级子目录,子目录的名称固定和当前的Configuration栏所选的构建目标相同。

  • Behavior : 设置一些构建行为参数。例如编译错误是否立即停止;并行编译选项等等;


  • C/C++ Build -> Settings: 如前面所说,只有勾选了让eclipse自行产生makefile,这里面才会有进行编译、链接参数配置的对话框,否则是看不见的。如下图:

    可以看到这里可以设置编译、链接的各种具体参数。例如上图中对于GCC C++ Compiler设置的命令名称是g++All options里面是所有的编译参数。这里的编译参数其实都是根据底下的一系列选项设置汇总过来的。

    • Dialect里面可以选择支持的C\++标准,支持C\++98、C\++0x以及C\++1y几个选项。
    • Preprocessor里面可以配置传递给编译器的预编译参数。
    • Includes配置头文件的查找路径,以及包含特定的头文件。
    • Optimization配置编译优化选项,例如优化级别-O设置。
    • Debugging配置debug参数,例如选择debug级别等等。
    • Warnings配置编译告警选项。
    • Miscellaneous:其他杂项配置。例如是否开启-v-fPIC等。

    如果你会写makefile,那么上述所有配置对你来说是非常轻松的,正确配置了这些参数后,eclipse就可以自动为你生成makefile执行构建了。如果你的项目已经有了构建脚本,那么你可以参照构建脚本来配置这里。

C/C++ General配置集

如下图,在工程属性里面选择C/C++ General,可以在其子标签页中进行代码静态检查、文件类型、代码风格等一些配置。由于这些大多在eclipse全局配置中设置过了,所以如果工程没有特殊需求,这里一般不用更改了。

在这里最重要的一个配置页是Paths and Symbols。在此可以设置头文件的搜索路径、预编译宏、链接库搜索路径、链接库名称等等。这些设置关系着eclipse能否正确构建以及解析代码符号。可以看到这里的一些配置和前面C/C++ Build -> Settings中编译、链接参数的一些配置是重复的。由于编译链接参数需要针对不同的构建目标分别配置,容易有重复;而且一旦不选择让eclipse生成makefile,编译链接参数配置就不可见。但是无论是否让eclipse生成makefile,它总要能正确解析代码的,所以eclipse在这里也提供了类似的配置选项。

这里IncludesSymbolsLibrariesLibrary Paths的配置,和前面编译链接参数配置一样,需要根据工程的具体构建情况去填写。此处只详细说一下Source Location选项。

如果你的eclipse工程文件就配置在项目代码目录里,那么这里一般不用配置。你在代码目录里面的目录变化会自动反映到eclipse中。如果你的工程文件和代码目录是分离的,那么就需要在这里进行目录关联。

如上图,在Source Location中点击Link Folder...,然后在弹出的对话框里面点击Advanced,勾选Link to folder in the file system,接下来点击Browse...在文件系统内选择需要关联的目录,之后该外部目录就被映射到eclipse工程内了。在此为了让配置和具体位置无关,可以选择使用Variables...,例如${PROJECT_LOC}表示当前工程的目录位置,${WORKSPACE_LOC}表示eclipse workspace的目录位置。

如上就是工程的所有重要的配置了。一旦配置正确,eclipse就能帮你执行构建了。现实中一般工程都有构建脚本,配置工程属性主要是为了让eclipse能够正确解析代码,这时主要配置好C/C++ General -> Paths and Symbols就好了。如果需要eclipse能够解析C\++11或者其它的C\++标准的语法和stl库符号,那么还需在C/C++ Build -> Settings中配置编译参数支持对应的C\++标准。

导出工程配置

配置好的工程构建属性可以导出然后共享给项目其他同事。

在菜单中选择File -> Export -> C/C++ -> C/C++ Project Settings,然后选择对应的工程,选择构建目标,可以将该工程对应构建目标下的配置导出成一个xml文件。这样别人就可以通过File -> Import -> C/C++ -> C/C++ Project Settings再将其导入了。

Eclipse为每个工程生成的所有配置其实都在工程目录下的.project.cproject文件里。将这两个文件共享给别人,放在相对于工程代码相同的位置,通过File -> import -> General -> Existing Projects info Workspace可以直接将eclipse工程导入。


在介绍完eclipse的全局配置和工程配置后,下一篇我们将详细介绍eclipse的高效操作技巧!

Effective Eclipse CDT (一)
Effective Eclipse CDT (三)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,744评论 25 707
  • Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI...
    AlphaGL阅读 3,744评论 0 24
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,628评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,773评论 6 342
  • 难得成绩出来我们班的过线人数是最多的,加油! 难得今天更加用心的备课,及时写出课后反思,为以后留下上课的心得体会。...
    闹闹小乖乖阅读 132评论 0 0