开发者

Eclipse CDT New Project Template - How to add a library

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?


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.


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'

    Eclipse CDT New Project Template - How to add a library

  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.

    Eclipse CDT New Project Template - How to add a library

  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>
    

    Eclipse CDT New Project Template - How to add a library

  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

Eclipse CDT New Project Template - How to add a library

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???

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜