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 Project
和Hello 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类型的工程,默认有
Debug
和Release
两种构建目标可以选择,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目录下。
-
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在这里也提供了类似的配置选项。
这里Includes
、Symbols
、Libraries
、Library 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的高效操作技巧!