37

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.

sblundy
  • 60,628
  • 22
  • 121
  • 123
  • 4
    This is one of the big weaknesses of Eclipse in general, I think. Headless builds are not a first class citizen in the Eclipse world. – JesperE Jan 08 '09 at 22:30
  • 1
    Have you considered using [Make](http://en.wikipedia.org/wiki/CMake)? – Lawand Jan 04 '09 at 14:22
  • 1
    Make uses the .mk files generated by CDT on build. So it isn't possible to build the project from scratch. – mmmmmmmm Jan 07 '09 at 21:26

5 Answers5

65

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}

On Windows, use eclipsec.exe instead of eclipse.exe to have build output written to stdout/stderr and so that the call blocks until completion.

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.

nocnokneo
  • 1,857
  • 20
  • 24
James Blackburn
  • 4,492
  • 2
  • 27
  • 24
  • 2
    In addition, you can specify a single configuration with: `-build {project_name[/config_name] | all}` Example: `-build project_name/Release` – Alejandro Blasco Oct 19 '17 at 15:44
1

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
  • 4,492
  • 2
  • 27
  • 24
0

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
  • 5,845
  • 22
  • 31
  • This is the answer to your question. You need to "mess around with Makefiles". Eclipse is not a build system. – Jesse Weigert Jan 09 '09 at 03:20
  • 3
    @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. – mmmmmmmm Jan 13 '09 at 17:27
  • 3
    New URL for @JesseWeigert comment is: http://blog.codinghorror.com/the-f5-key-is-not-a-build-process/ – Jonah Graham Nov 03 '15 at 11:17
0

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
  • 19,853
  • 5
  • 45
  • 59
-1

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
  • 5,755
  • 4
  • 37
  • 54