Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cdt-dev] Programmatically excluding files from build "on-the-fly"

James Blackburn wrote:
There are a couple other ways to do this.  The Platform core.resources
now has filtering so you can add / exclude source at the resource
layer.  See the org.eclipse.core.resources.filterMatchers extension
point and API on IWorkspace.  You can define your own filter hook
which is invoked.

I was under the impression that these weren't properly supported by CDT yet (https://bugs.eclipse.org/bugs/show_bug.cgi?id=317783), but now I see that this is fixed in CDT 7.0.1, so I will have another look. The idea of a filter hook sounds appealing.

The difference to the exclude-from-build/source-path solution would be that in the latter, the excluded files are still visible in the project tree, which I kinda liked, but that is not a requirement (and might even be considered a disadvantage by others).

Another way might be to add an eclipse linked resource to the
directory(ies) from a place within a CDT source directory to the place
where your source is located.

I guess that would more or less correspond to the Visual Studio/ Xcode/... solution where project contents and file system layout are completely independent (which is actually what we're doing in our legacy IDE that is to be superseded by the Eclipse-based one). I was shying away from this because it seems to go against the grain of the Eclipse philosophy, and also based on a general vague (and admittedly not well-founded) impression (from reading mailing lists and bugzilla entries) that linked resources are some kind of second-class citizens in Eclipse.

Given that you're building different sets of source, why don't you
just model this with CDT build configurations?

That's an interesting idea, but I think it's not a good match for our requirements because the subsets of files to be built are too diverse. We will basically have a row of checkboxes "Use feature A", "Support hardware B", ... that each causes some files to be added to the build, and making a separate configuration for every possible combination of checkboxes looks unwieldy. We may also need to keep the configurations orthogonal to the selection of the source subset, e.g. to switch between "debug" and "release" builds.

I guess it's difficult to pick out the best way of doing this without
knowing a bit more about how this source comes in and out of
existence.

The files form the operating system for an embedded system and are compiled together with user application code into a single binary. Depending on what hardware needs to be supported and what OS features the user wants, different subsets of OS files need to be built. The files come into existence by being checked out from a Subversion repository that always contains files for all hardware devices and software features (some of them conflicting). We can't just delete the files that aren't needed because the next "svn update" would bring them back. Such an update may also add new files, along with feature definitions that determine under what circumstances they are to be included in the build, and the user should then immediately be able to select (or deselect) these new features without having to recreate or otherwise manually adjust the project.


Thank you for these suggestions! Very helpful. I will investigate the resource-filter solution now and then probably settle on either that or the source-path-exclusion solution.

 -Christian


Back to the top