Eclipse CDT New Project Template - How to add a library

青春壹個敷衍的年華 提交于 2020-01-24 07:24:08

问题


In Eclipse CDT Indigo, there is a new feature that allows you to add new C/C++ template projects to the new project wizard. I've figured out how to do this successfully up to a point. I can create a basic project that just depends on simple source files but now I'd like to create a CPPUnit project to which I'd like to automatically add the CPPUnit library. For the life of me, I can't figure out how to achieve this end. Does anyone know how?


回答1:


Sorry I am late, but I just had the very same question for the very same problem. I have figured out a solution. It works for me, but I am well aware that it is probably not as general as hoped for. In your template.xml, you may want to add the following process:

<process type="org.eclipse.cdt.managedbuilder.core.AppendToMBSStringListOptionValues">
    <simple name="projectName" value= "$(projectName)"/>      
    <complex-array name="resourcePaths">
        <element>
            <simple name="id" value="gnu.cpp.link.option.libs" />
            <simple-array name="values">
                <element value="dl" />
                <element value="cppunit" />
            </simple-array>
            <simple name="path" value="" />
        </element>
    </complex-array>
</process>

The crucial part is to know where to put the two libraries dl and cppunit. The key gnu.cpp.link.option.libs is the correct one for the GNU compiler tool chain which is active on most Linux computers.

I have extracted the key name from the Eclipse plugin org.eclipse.cdt.managedbuilder.gnu.ui_XXXXXXX. You can find it at Eclipse's plugins folder. If you need the key for another toolset, I recommend opening the plugin.xml file. Here, you should search for the attribute valueType="libs". The corresponding id is the key you need to manipulate in your process file.

If you also need to manipulate the library search path, search for valueType="libPaths". This will lead you to the key gnu.cpp.link.option.paths. You can add additional entries to the list with a process similar to the one shown above.




回答2:


It is AMAZING how hard this stuff is to find. In addition to plugin.xml browsing, all the templates provide efficient ramp up on implementing these options:

Source Reference

  • manual download: Eclipse CDT Source Download

Templates to Browse

  • plugins/org.eclipse.cdt.managedbuilder.gnu.ui_X.X.X.xxxxx.jar/templates/projecttemplates/

    • and then in each proj dir (e.g. 'HeloWorldCAnsiProject') locate template.xml

GNU C Options to Browse

  • plugins/org.eclipse.cdt.managedbuilder.gnu.ui_X.X.X.xxxxx.jar/plugin.xml

Example Implementation By Reverse-Engineering

Goal - set 'Cross GCC Compiler' -> Optimization -> 'Other optimization flags'

  1. create a dummy C project with no customization
  2. open properties. set the target field manually. I set 'Other optimization flags' to 'COME_FIND_ME'

  3. open the .cproject file in an editor. search for COME_FIND_ME. here is what I found:

    <option id="gnu.c.compiler.option.optimization.flags.1380831355" superClass="gnu.c.compiler.option.optimization.flags" value="COME_FIND_ME" valueType="string"/>
    
    • it is then of type 'string' and 'id' gnu.c.compiler.option.optimization.flags.

  4. Search in the plugin.xml listed above for 'gnu.c.compiler.option.optimization.flags'. Here's what i found (on line 1120):

      <option
          name="%Option.Posix.Optimize.Flags"
          category="gnu.c.compiler.category.optimization"
          id="gnu.c.compiler.option.optimization.flags"
          valueType="string">
      </option>
    

  5. get outta this example project, and go back to your template.xml you want to add this to. we want to append here to default value, so lets do that. add:

    <process type="org.eclipse.cdt.managedbuilder.core.AppendToMBSStringOptionValue">
        <simple name="projectName" value="$(projectName)" />
    
        <complex-array name="resourcePaths">
            <element>
                <simple name="id" value="gnu.c.compiler.option.optimization.flags" />
                <simple name="value" value="-Omg_eclipse" />
                <simple name="path" value="" />
            </element>
        </complex-array>
    </process>
    

and that's it.

Useful Links

  1. Help - Eclipse Platform - How to register a project template with CDT
  2. Help - Eclipse Platform - Example template

Notes

Here are where the MBS append/set functions live:

  • org.eclipse.cdt.managedbuilder.core.source_X.X.X.xxxxx.jar/org/eclipse/cdt/managedbuilder/templateengine/processes

Full Template File Example

finally, here's a code snippet that may save you hours of scouring the internet. this template.xml creates a new project by copying over main.c, and setting three build options.

<?xml version="1.0" encoding="ISO-8859-1"?>
<template type="ProjTempl" version="1.0" supplier="stack_overflow" revision="1.0" author="Justin Reina"
    id="EXE" label="My C Project" description="set some stuff."help="help.html">

   <process type="org.eclipse.cdt.core.CreateSourceFolder">
        <simple name="projectName" value="$(projectName)"/>
        <simple name="path" value="bsp"/>
    </process>

    <process type="org.eclipse.cdt.core.AddFiles">  
        <simple name="projectName" value="$(projectName)"/>     
        <complex-array name="files">    
            <element>
                <simple name="source"      value = "main.c"/>
                <simple name="target"      value = "main.c"/>
                <simple name="replaceable" value = "true"  />
            </element>
        </complex-array>
    </process>

    <process type="org.eclipse.cdt.managedbuilder.core.AppendToMBSStringListOptionValues">
        <simple name="projectName" value= "$(projectName)"/>      
        <complex-array name="resourcePaths">
            <element>
                <simple name="id" value="gnu.c.link.option.libs" />
                <simple-array name="values">
                    <element value="corestuff" />
                    <element value="utilstuff" />
                </simple-array>
                <simple name="path" value="" />
            </element>
        </complex-array>
    </process>

    <process type="org.eclipse.cdt.managedbuilder.core.AppendToMBSStringOptionValue">
        <simple name="projectName" value="$(projectName)" />

        <complex-array name="resourcePaths">
            <element>
                <simple name="id" value="gnu.c.compiler.option.optimization.flags" />
                <simple name="value" value="-Omg_eclipse" />
                <simple name="path" value="" />
            </element>
        </complex-array>
    </process>

    <process type="org.eclipse.cdt.managedbuilder.core.SetMBSBooleanOptionValue">
        <simple name="projectName" value="$(projectName)" />

        <complex-array name="resourcePaths">
            <element>
                <simple name="id" value="gnu.c.link.option.nostdlibs" />
                <simple name="value" value="true" />
                <simple name="path" value="" />
            </element>
        </complex-array>
    </process>
</template>

To the Eclipse Foundation; next time can I just pay you a half-day's salary for you to give me this information???



来源:https://stackoverflow.com/questions/6711056/eclipse-cdt-new-project-template-how-to-add-a-library

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!