[CMake] Eclipse CDT4 CMake Generator - Pre-Alpha version

Miguel A. Figueroa-Villanueva miguelf at ieee.org
Tue Jul 31 17:09:43 EDT 2007


Hello Mike,

My comments below.

On 7/31/07, Mike Jackson <imikejackson at gmail.com> wrote:
> You dont. That is what I tried to explain in one of my other posts.
> Eclipse has the notion of One project PER top level directory. If you
> had a project setup like the above then you would have to actually
> take the folder sub1 and place it at the same level as foo.

Yes, that's what I thought and I really dislike!, but I'll live with
of course ;)

>     Let's get straight what _Should_ be going on. The eclipse
> generator is basically going to generate a single eclipse project
> file that has the following properties:

Agreed, one .project/.cproject is what I'm doing.

>     Project Type: Makefile

Yes, that's the whole idea of implementing the Eclipse generator on
top of the "Unix Makefiles", etc.

>     Build Command: /usr/bin/make -C ${project_loc}/[path to build dir]

Don't agree completely.

I very much appreciate the wipe-out build directory and start over
methodology that CMake enables. I also would not force an
out-of-source build to be in a specific struture relative to the
source dir. I also appreciate that I can generate different
out-of-source builds from the same source code. This would potentially
be helpful for testing "Eclipse CDT4 - Unix Makefiles" and "Eclipse
CDT4 - MinGW Makefiles". Therefore, I really want to have the toplevel
(and only) .project/.cproject file in the top-level binary dir.

So, to work my way around this CDT limitation what I did was that, for
each project, I create a linked resource in the .project file. So,
that the following CMake structure:

PROJECT(foo)
sub1/PROJECT(P1)
sub2/PROJECT(P2)

produces the following in the .project:

...
        <linkedResources>
                <link>
                        <name>P1</name>
                        <type>2</type>
                        <location>D:/path/to/P1</location>
                        <name>P2</name>
                        <type>2</type>
                        <location>D:/path/to/P2</location>
                </link>
        </linkedResources>
...

and I also put the following in the .cproject:

...
<pathentry kind="src" path="P1"/>
<pathentry kind="src" path="P2"/>
...

It's not as good as encapsulating each cmake project in an eclipse
project, but that is just not supported right now in eclipse cdt as
you stated.

>     Include Dirs: Loop through them and add them all, regardless of
> where they are defined. Eclipse needs them all to index you project
> correctly.

Yes, I guess this is the thing to do given the problems stated above.

>     Source Dirs: Don't need these

I do, since I'm putting the .project/.cproject in the binary dir as
explained above. Of course, these are the linked resources above.

>     Unless all your sources are loose in the top level you need to
> add each source directory to the "Include" paths

That is what I believe to be doing with the pathentry's above.


> What is happening is that Eclipse is going to use the generated
> Makefile as its build system. The project files that are created are
> actually pretty small because most everything is going to be defined
> in the makefile and eclipse is going to run "/usr/bin/make ....." and
> then parse the output for warnings and errors.
>
> Does this help explain things better?

Yes, it actually confirmed my google search and I think we're in
principle, pretty much on the same page. Except for implementation
details regarding where to put the top-level generated files I agree
with all.

BTW, do you have complex hierarchichal and nested projects which you
have worked on that your simple top-level .project handles well. Could
I take a look at these .project/.cproject ??

Thanks for the info.

--Miguel


More information about the CMake mailing list