views:

1776

answers:

6

What is the best solution to build several CDT C++ projects from the command line? The projects have references and so it is not possible to just build single projects.

A: 

Have you considered using Make?

Lawand
Make uses the .mk files generated by CDT on build. So it isn't possible to build the project from scratch.
rstevens
+1  A: 

If you created a Make project under CDT you can just use your favorite shell and execute make in all the projects dirs.

Paulo Lopes
We use Eclipse so we don't need to mess around with Makefiles...
rstevens
This is the answer to your question. You need to "mess around with Makefiles". Eclipse is not a build system.
Jesse Weigert
See http://www.codinghorror.com/blog/archives/000988.html for more info.
Jesse Weigert
@Jesse: This is only a half answer. And it wouldn't be an answer if I had written that our projects are not Make projects. Because changing the pre-conditions of a question is not the answer to it.
rstevens
A: 

We do this in our existing build.

Put a makefile in all your external references and your toplevel project. In your "all" rule, have it run: make -C ./externalref1 make -C ./externalref2 etc

we actually define the external dependencies in a variable: EXT_DEP = externalref1 externalref2 then use the subst (substitute) command to kick off all the sub-makes using the correct call.

Jeff Lamb
A: 

Headless build with the manage builder is currently not supported, see bug 186847 - CDT internal builder does not support automated command line builds.

If you use the unmanaged (make) builder, then you already have Makefiles that you can use from the command line.

lothar
+6  A: 

This feature has been added in CDT 6 (Final build due June 15th 2009). You can download the final release candidate from builds page: download.eclipse.org/tools/cdt/builds/6.0.0/.

Using a release of Eclipse 3.5 + CDT 6, you can import, build and clean-build projects and the workspace using the following options sent to Eclipse at the command line:

eclipse -nosplash 
        -application org.eclipse.cdt.managedbuilder.core.headlessbuild 
        -import {[uri:/]/path/to/project} 
        -build {project_name | all} 
        -cleanBuild {projec_name | all}

The '-application' switch instructs Eclipse to run the CDT headless builder rather than starting the workbench. The other switches can be used individually or together. This means you can checkout a project using a shell script of your own, '-import' it into a workspace, and '-build' it using the Managedbuilder's headless builder.

Use the '-data' switch to specify the workspace to use, which can be an empty temporary directory, see the runtime documentation for other switches supported by the platform runtime: help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/misc/runtime-options.html

See bug 186847 comment 24 and onwards for more detail on the committed functionality.

James Blackburn
A: 

Pre CDT 6 you could use the JDT's AptBuilder (included with classic Eclipse, for example).

This lets you build an already configured workspace. So you: checkout your source, configure a workspace which points to the checked-out projects. Your automated build scripts can then update the checkouts and run the AptBuilder without needing to start the GUI.

James Blackburn