On Fri, Jul 3, 2009 at 2:33 PM, Robert Dailey <[email protected]> wrote:
> On Fri, Jul 3, 2009 at 3:31 PM, Robert Dailey <[email protected]> wrote: > >> On Fri, Jul 3, 2009 at 2:54 PM, James Bigler <[email protected]>wrote: >> >>> On Wed, Jul 1, 2009 at 4:34 PM, Robert Dailey <[email protected]>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..
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake
