CDT 拥有完整的用于创建新项目的模板机制。
基本上,您扩展了org.eclipse.cdt.core.templates
扩展点并指向template.xml
文件,其中包含许多您可以执行的命令。您不需要为此编写任何 Java 代码,但需要创建一个插件项目。
您可以做的事情有:
- 创建文件夹
- 将文件添加到项目中
- 设置托管构建设置(这是最相关的设置,因为您可以设置编译器选项并添加库等)
- 向新建项目向导添加额外页面以提示用户提供额外信息
Eclipse 文档有一个特殊的部分,在这里详细介绍了如何执行此操作:http://help.eclipse.org/mars/topic/org.eclipse.cdt.doc.isv/guide/projectTemplateEngine/index.html http://help.eclipse.org/mars/topic/org.eclipse.cdt.doc.isv/guide/projectTemplateEngine/index.html
CDT 附带的 Hello World 项目的模板如下:https://github.com/eclipse/cdt/blob/master/build/org.eclipse.cdt.managementbuilder.gnu.ui/templates/projecttemplates/HelloWorldCAnsiProject/template.xml https://github.com/eclipse/cdt/blob/master/build/org.eclipse.cdt.managedbuilder.gnu.ui/templates/projecttemplates/HelloWorldCAnsiProject/template.xml
请注意,如果您最初创建插件作为非打包插件安装,则可以就地编辑它,添加新模板或编辑已完成的模板。
更进一步,您可以与您的团队共享此模板插件项目,并且所有人都可以从此功能中受益。
一步步
执行此操作的分步过程(在 Eclipse Mars.1 上测试,安装了 CDT 和插件开发工具以及用于编辑 template.xml 的 XML 编辑器)
- 创建一个插件项目(
File
| New
| Other...
| Plug-in project
)
- 填写项目名称并按
Next
/ Finish
直到完成
现在,您的磁盘上应该有您创建的项目中如下所示的文件:
$ find . -type f
./.classpath
./bin/com/example/cdt/templates/Activator.class
./.project
./src/com/example/cdt/templates/Activator.java
./.settings/org.eclipse.jdt.core.prefs
./META-INF/MANIFEST.MF
./build.properties
- Open the plug-in.xml and do the following
- 选择
Extensions
tab
- 按添加
- 输入扩展点
org.eclipse.cdt.core.templates
- 取消勾选
Show only extension points [...]
复选框
- 选择
org.eclipse.cdt.core.templates
从列表中
- Press
Finish
- Say
Yes
添加依赖项
- 将所需的设置添加到
plugin.xml
如屏幕截图所示并在后面的plugin.xml 代码示例中给出。
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
point="org.eclipse.cdt.core.templates">
<template
filterPattern=".*gcc"
id="com.example.cdt.templates.template1"
location="template/template.xml"
projectType="org.eclipse.cdt.build.core.buildArtefactType.exe">
</template>
</extension>
</plugin>
- 现在创建
template.xml
在指定的位置plugin.xml
(template/template.xml
)包含以下内容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<template type="ProjTempl" version="1.0" supplier="Stack Overflow"
revision="1.0" author="Jonah Graham" id="EXE" label="Stack Overflow Example"
description="An example for https://stackoverflow.com/questions/33092746/creating-a-new-c-project-in-eclipse-cdt-with-the-same-settings-as-another-proj."
help="help.html">
<process type="org.eclipse.cdt.managedbuilder.core.NewManagedProject">
<simple name="name" value="$(projectName)" />
<simple name="artifactExtension" value="exe" />
<simple name="isCProject" value="true" />
</process>
<process type="org.eclipse.cdt.core.CreateSourceFolder">
<simple name="projectName" value="$(projectName)" />
<simple name="path" value="src" />
</process>
<process type="org.eclipse.cdt.core.AddFiles">
<simple name="projectName" value="$(projectName)" />
<complex-array name="files">
<element>
<simple name="source" value="src/basename.c" />
<simple name="target" value="src/$(projectName).c" />
<simple name="replaceable" value="true" />
</element>
</complex-array>
</process>
<process type="org.eclipse.cdt.ui.OpenFiles">
<simple name="projectName" value="$(projectName)" />
<complex-array name="files">
<element>
<simple name="target" value="src/$(projectName).c" />
</element>
</complex-array>
</process>
<!-- Set -Wall by checking the checkbox in the settings -->
<process
type="org.eclipse.cdt.managedbuilder.core.SetMBSBooleanOptionValue">
<simple name="projectName" value="$(projectName)" />
<complex-array name="resourcePaths">
<element>
<simple name="id" value=".*compiler\.option\.warnings\.extrawarn.*" />
<simple name="value" value="true" />
<simple name="path" value="" />
</element>
</complex-array>
</process>
<!-- Set -Werror by adding textual build settings -->
<process
type="org.eclipse.cdt.managedbuilder.core.SetMBSStringOptionValue">
<simple name="projectName" value="$(projectName)" />
<complex-array name="resourcePaths">
<element>
<simple name="id" value=".*compiler\.option\.misc\.other.*" />
<simple name="value" value="-c -fmessage-length=0 -Werror" />
<simple name="path" value="" />
</element>
</complex-array>
</process>
<!-- Add -lmylibname to libraries to link -->
<process
type="org.eclipse.cdt.managedbuilder.core.AppendToMBSStringListOptionValues">
<simple name="projectName" value="$(projectName)" />
<complex-array name="resourcePaths">
<element>
<simple name="id" value=".*link\.option\.libs.*" />
<simple-array name="values">
<element value="mylibname" />
</simple-array>
<simple name="path" value="" />
</element>
</complex-array>
</process>
</template>
- 添加模板中列出的源文件以及您想要的任何内容
template/src/basename.c
您现在应该有一个如下所示的目录结构:
$ find . -type f
./.classpath
./template/src/basename.c
./template/template.xml
./bin/com/example/cdt/templates/Activator.class
./.project
./src/com/example/cdt/templates/Activator.java
./.settings/org.eclipse.jdt.core.prefs
./META-INF/MANIFEST.MF
./plugin.xml
./build.properties
启动 Eclipse 应用程序进行测试(Run
menu | Run As
| Eclipse Application
)。您也可以右键单击该项目并选择Run As
| Eclipse Application
.
在新运行的 Eclipse 中,启动新项目向导并选择新的 C 项目类型:
运行构建会显示新设置(该错误是预期的,因为我实际上没有名为 mylibname 的库):
Building file: ../src/hello2.c
Invoking: GCC C Compiler
gcc -O0 -g3 -Wall -Wextra -c -fmessage-length=0 -Werror -MMD -MP -MF"src/hello2.d" -MT"src/hello2.o" -o "src/hello2.o" "../src/hello2.c"
Finished building: ../src/hello2.c
Building target: hello2
Invoking: GCC C Linker
gcc -o "hello2" ./src/hello2.o -lmylibname
/usr/bin/ld: cannot find -lmylibname
collect2: error: ld returned 1 exit status
make: *** [hello2] Error 1
棘手的部分?
您可能需要检查.cproject
来自您的基础项目的文件以确定进入的魔术字符串id
字段。例如,在我的.cproject
for -Wextra
我可以看到这个:
<option id="gnu.c.compiler.option.warnings.extrawarn.176373860" name="Extra warnings (-Wextra)" superClass="gnu.c.compiler.option.warnings.extrawarn" value="true" valueType="boolean"/>
这翻译成这个命令template.xml
:
<!-- Set -Wall by checking the checkbox in the settings -->
<process
type="org.eclipse.cdt.managedbuilder.core.SetMBSBooleanOptionValue">
<simple name="projectName" value="$(projectName)" />
<complex-array name="resourcePaths">
<element>
<simple name="id" value=".*compiler\.option\.warnings\.extrawarn.*" />
<simple name="value" value="true" />
<simple name="path" value="" />
</element>
</complex-array>
</process>
id 来自gnu.c.compiler.option.warnings.extrawarn.176373860
到正则表达式.*compiler\.option\.warnings\.extrawarn.*
。开始是.*
因此这适用于 C 和 C++ 编译器选项,因为 C++ id 将以gnu.cc.compiler[...]
我摆脱了结尾.*
因为您不知道号码和后缀template.xml
下一步
完成后,请参阅启动 Eclipse 插件模板 https://stackoverflow.com/questions/33124278/launching-eclipse-plug-in-template/33133450#33133450了解如何将插件导出到正在运行的 Eclipse 中。