Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Eclipse project linked resources by environment variable

I'm having trouble setting up my Eclipse C++ project. I need to link in source from different directories here and there and in my environment the source I need actually moves sometimes (for example when i always want the latest version of a sub system currently located in a directory like /aaa/bbb/v1.2.3/src). I always know the location of the source I want through linux environment variables, like $SYSTEM1_LATEST_ROOT. Without this I need to update all my projects whenever i should pick the source from a new location.

I cannot find a way to include the environment variables in the paths for linked resources. Include directories work perfectly (these are defined in my .cproject file), for example (.cproject):

<option id="..." name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
    ...
    <listOptionValue builtIn="false" value="${SYSTEM1_LATEST_ROOT}/src"/>
    ...
</option>

For linked resources (defined in the .project file) I know I can use path variables but these are defined inside Eclipse only and I find no way to have them based on environment variables, but only to be relative to my own project location, which is not what I want to do.

In short, I want to link in source code from locations based on environment variables. The variable name is constant, but the actual location (known through the environment variable) of the source is not.

Working example with path relative to project. This is not what i want (.project):

<linkedResources>
    <link>
        <name>System1_src</name>
        <type>2</type>
        <locationURI>PARENT-6-PROJECT_LOC/src</locationURI>
    </link>
</linkedResources>

Non-working example of what i want to do (.project):

<linkedResources>
    <link>
        <name>System1_src</name>
        <type>2</type>
        <locationURI>${SYSTEM1_LATEST_ROOT}/src</locationURI>
    </link>
</linkedResources>

Any suggestions?

like image 261
Martin G Avatar asked Apr 17 '14 13:04

Martin G


People also ask

How do I change linked resources in Eclipse?

"The linked resource target path can be changed by selecting the Edit... button in the File > Properties > Resource property page of the linked resource. "

What are linked resources in Eclipse?

If you have an existing structure of sources which does not match the Eclipse model of one project per directory, you might find that linked resources are the best solution. Linked resources enable you to use the sources without having to move them or co-locate them with the project files.

What are linked resources?

Linked resources are files and folders that are stored in locations in the file system outside of the project's location. These special resources can be used to add files and folders to your project that for some reason must be stored in a certain place outside of your project.


2 Answers

After waiting for a month i figure it's time I answer with my own findings..

First, the concept of path variables (http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.platform.doc.user/concepts/cpathvars.htm);

"Linked resource target paths can be either defined 
 as absolute paths, or relative to a path variable."

Two options; absolute paths or relative to path variable.

Specifically it says about path variables:

"Each project contain a pre-defined set of path 
 variables available for defining linked resources, 
 including ECLIPSE_HOME, PARENT_LOC, PROJECT_LOC and 
 WORKSPACE_LOC.

New path variables can be defined relative to 
existing path variables by using the ${VAR} syntax. 
For example, a path variable FOO can be defined 
relative to BAR by defining it to "${BAR}../foo"."

In other words, path variables are always relative to the project location in some way, using a liberal interpretation of the word project.

So the next option would be absolute path. An absolute path containing an environment variable would work!

"The linked resource target path can be changed by 
 selecting the Edit... button in the File > Properties > 
 Resource property page of the linked resource. "

Trying this it gets painfully obvious that only path variables are supported as part of the path to the linked resource. And we already know the definition of a path variable.

The answer is...

Eclipse does not contain this very basic feature.

Anyone, please prove me wrong!

like image 158
Martin G Avatar answered Nov 09 '22 14:11

Martin G


I thought I'd add my solution to the problem here so others might be able to benefit from it.

While not supported "by default", it turns out that Eclipse can use path variables. The key here is to use its "Linked Resources" feature. Go to Window -> Preferences -> General -> Workspace -> Linked Resources and add your path variables there.

enter image description here

like image 34
Dave Avatar answered Nov 09 '22 13:11

Dave