[CMake] project() and SLN files

Robert Dailey rcdailey at gmail.com
Fri Jul 3 16:33:38 EDT 2009


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?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090703/8f62c405/attachment.htm>


More information about the CMake mailing list