gpt4 book ai didi

c++ - 使用与另一个项目相同的设置在 Eclipse CDT 中创建一个新的 C++ 项目

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:18 35 4
gpt4 key购买 nike

有没有一种直接的方法来创建一个新的 C++ 项目来克隆现有项目的设置?在开发 C++ 时,我喜欢写很多小的测试和示例,但是如果我的代码依赖于外部库,就像他们经常做的那样,我每次都必须从头开始设置包含、库、编译器设置等。是否有某种模板机制?

我知道 C/C++ 项目设置的导出/导入。但是,这似乎只是为 C++ 编译选择包含路径和 #defines。它不导出完整的设置(编译器选项、警告设置、链接器选项、库、库路径等)这一事实确实限制了它的实用性。

此外,您必须为每个运行配置单独执行此操作,尽管这会带来一些不便。

我通常采用的是复制一个测试项目并手动编辑 .project.cproject文件,然后 nuking 和替换文件。但这似乎是一个容易出错的黑客。

还有其他方法吗?我是否需要切换到单独的构建系统并在外部生成 eclipse 项目才能拥有看起来非常基本的功能?

更新

我已经尝试创建一个插件项目,但如果您以前没有这样做过,那么这些说明还有很多不足之处。我绝对想弄清楚如何做到这一点。

我以一些非常简单的方式复制并修改了示例模板,只是为了开始,但是“如何使用 CDT 注册项目模板”说明从一开始就让我迷失了:“1. 从 Eclipse 创建一个空插件项目没有源文件夹的工作台。”我认为这需要安装 PDE,我做到了,但后来我迷路了。我尝试了“文件/新建/插件项目”,取消选择“创建 Java 项目”(我认为这就是“空”的意思)。这将创建一个仍然有很多东西的项目。然后我按照步骤 2 中的描述创建了子目录,但不知道如何让这些子目录显示在 Eclipse 中,因此我无法浏览到步骤 11 中的模板 XML 文件。此外,在步骤 9 中/10,我没有得到一个模板“字面命名为“(模板)” - 相反,它创建了一个带有我的模板项目全名的模板。

最佳答案

CDT 具有用于创建新项目的完整模板机制。

基本上,您扩展了 org.eclipse.cdt.core.templates扩展点指向 template.xml文件中有一堆你可以执行的命令。您不需要为此编写任何 Java 代码,但您需要创建一个插件项目。

你可以做的事情的种类:

  • 创建文件夹
  • 将文件添加到项目
  • 设置托管build设置(这是最相关的设置,因为您可以设置编译器选项和添加库等)
  • 向新建项目向导添加额外页面以提示用户提供额外信息

  • Eclipse 文档有一个特殊的部分,在此处详细介绍了如何执行此操作: 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.managedbuilder.gnu.ui/templates/projecttemplates/HelloWorldCAnsiProject/template.xml

    需要注意的是,如果您最初创建要安装为非打包插件的插件,您可以就地编辑它,添加新模板或编辑您已经完成的模板。

    更进一步,您可以与您的团队共享此模板插件项目,所有人都可以从拥有此功能中受益。

    一步步

    执行此操作的分步过程(在 Eclipse Mars.1 上测试,安装了 CDT 和插件开发工具以及用于编辑 template.xml 的 XML 编辑器)
  • 创建插件项目 ( File | New | | Other... | | Plug-in project )

  • step 1
  • 填写项目名称,然后按 Next/Finish直到完成

  • step 2

    您现在应该在您创建的项目中在您的磁盘上拥有如下所示的文件:
    $ 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
  • 打开plug-in.xml,执行以下操作
  • 选择 Extensions标签
  • 按添加
  • 输入扩展点 org.eclipse.cdt.core.templates
  • 取消选中 Show only extension points [...]复选框
  • 选择 org.eclipse.cdt.core.templates来自列表
  • Finish
  • Yes添加依赖项

  • step 3
  • 将所需的设置添加到 plugin.xml如屏幕截图所示,并在之后的 plugin.xml 代码示例中给出。

  • step4

    <?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.xmlplugin.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 菜单 | Run As | Eclipse Application)。您也可以右键单击该项目并选择 Run As | Eclipse Application .
  • 在新运行的 Eclipse 中,启动一个新项目向导并选择您的新 C 项目类型:

  • new project wizard

    运行构建会显示新设置(该错误是意料之中的,因为我实际上没有名为 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-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 中您不知道编号和后缀

    下一步

    完成后,请参阅 Launching Eclipse plug in template了解如何将插件导出到正在运行的 Eclipse。

    关于c++ - 使用与另一个项目相同的设置在 Eclipse CDT 中创建一个新的 C++ 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33092746/

    35 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com