[CMake] project() and SLN files

James Bigler jamesbigler at gmail.com
Fri Jul 3 16:44:01 EDT 2009


On Fri, Jul 3, 2009 at 2:33 PM, Robert Dailey <rcdailey at gmail.com> wrote:

> On Fri, Jul 3, 2009 at 3:31 PM, Robert Dailey <rcdailey at gmail.com> wrote:
>
>> On Fri, Jul 3, 2009 at 2:54 PM, James Bigler <jamesbigler at gmail.com>wrote:
>>
>>> On Wed, Jul 1, 2009 at 4:34 PM, Robert Dailey <rcdailey at gmail.com>wrote:
>>>
>>>> Hi,
>>>> If I have the following CMakeLists.txt:
>>>>
>>>> cmake_minimum_required( VERSION 2.6.4 )
>>>>
>>>> project( project1 )
>>>> add_executable( project1 source1.cpp )
>>>>
>>>> project( project2 )
>>>> add_executable( project2 source2.cpp )
>>>>
>>>> project( project3 )
>>>> add_executable( project3 source3.cpp )
>>>>
>>>> If I create visual studio 2008 files with this, I end up getting the
>>>> following project files:
>>>>
>>>> project1.vcproj
>>>> project2.vcproj
>>>> project3.vcproj
>>>> project3.sln
>>>>
>>>> The problem here is that I want the SLN file to be named project1.sln
>>>> (after the first call to project() ). Is there a way I can tell CMake which
>>>> call to project() in the same directory will generate the "master" project
>>>> file? Note that if I add a dummy project to the end of the file:
>>>>
>>>> project( foo )
>>>>
>>>> I get:
>>>> project1.vcproj
>>>> project2.vcproj
>>>> project3.vcproj
>>>> foo.sln
>>>>
>>>> So it gives me some limited control over the naming, but it isn't ideal.
>>>>
>>>>
>>> I typically only do one project in my setups, and I name the project what
>>> I want to show up in VS.  I then have lots of add_executables and other
>>> targets that show up as "projects" in the VS solution.  I'm not sure what
>>> you are trying to gain by having lots of project() calls.
>>>
>>
>> What you are doing sounds like:
>>
>> project( foo )
>> add_library( foo STATIC foo1.cpp )
>> add_library( foo STATIC foo2.cpp )
>> add_library( foo STATIC foo3.cpp )
>>
>> Is this true? If it is, you can't do this in v2.6.4. CMake will fail
>> because you are creating multiple libraries with the same name. What exactly
>> is it you are doing?
>>
>
> Interesting, this seems to work:
>
> project( foo )
> add_library( foo1 STATIC foo1.cpp )
> add_library( foo2 STATIC foo2.cpp )
> add_library( foo3 STATIC foo3.cpp )
>
> This creates a solution called "foo.sln" and 3 projects: "foo1.vcproj",
> "foo2.vcproj", "foo3.vcproj". Why does this work? I thought for every
> add_library() there must be 1 call to project(). Since I didn't call
> project() for foo1, foo2, or foo3, I don't know why it's letting me create
> those libraries. Can someone explain this behavior?
>

I was under the impression that project() created some kind of scope that
allows you to reset certain variables.  Subdirectories allow you to create a
new scope, but you inherit all the values from the parent.  I believe
project() reset some variables (like for example the list of targets), so
you can have a newish "top" CMakeLists.txt.  I've never done this.  Again, I
just setup one project and do a bunch of targets each with unique names like
you described with foo1, foo2, etc..
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090703/bec60f58/attachment.htm>


More information about the CMake mailing list