[CMake] Cmake 2.6.0 release and _Util project on Visual studio 2003

Markus Israelsson markus.israelsson at sensegraphics.com
Fri May 9 09:17:07 EDT 2008


Ok,

Then I understand the CMake concept and how it differs from the concept
in visual studio. We use the TARGET_LINK_LIBRARIES for non-win32
platforms (good to know that it is for all makefiles) to add it for
linking. The reason for not having it on win32 (visual studio in our
case) is simply because of cosmetic reasons. We will have to change it I
guess. It seems though like the linking part takes place no matter which
version of visual studio is used. Should not the extra _UTIL projects be
created for other versions of visual studio?

Thanks for all your help.

-----Original Message-----
From: Brad King [mailto:brad.king at kitware.com] 
Sent: den 9 maj 2008 15:05
To: Markus Israelsson
Cc: Bill Hoffman; cmake at cmake.org
Subject: Re: [CMake] Cmake 2.6.0 release and _Util project on Visual
studio 2003

Markus Israelsson wrote:
> Of course I forgot to add.
> 
> None of the libraries are static. They are all SHARED. That is why it 
> confuses me. I have always used visual studio dependencies to build 
> them in a certain order. Also the dependency in visual studio means 
> that library A that uses features of library B which it depends on can

> find the symbols in library B (find and link with the lib) without 
> having to state explicitly in the link libraries properties that it 
> should. This is true for all versions of microsoft visual studio that 
> I have ever worked with (vc7, vc8 and vc9).
> 
> I guess that this is not what CMake mean with ADD_DEPENDENCIES.

ADD_DEPENDENCIES is just to add dependencies, not for linking.
Implementing this on VS results in the intermediate _Util projects to
prevent linking.  You should use TARGET_LINK_LIBRARIES for linking:

  TARGET_LINK_LIBRARIES( FirstProject SecondProject )

-Brad

> -----Original Message-----
> From: Bill Hoffman [mailto:bill.hoffman at kitware.com]
> Sent: den 9 maj 2008 14:39
> To: Markus Israelsson
> Cc: cmake at cmake.org
> Subject: Re: [CMake] Cmake 2.6.0 release and _Util project on Visual 
> studio 2003
> 
> Markus Israelsson wrote:
>> Hello,
>>  
>> I am wondering if anyone can shed some light on where the 
>> <ProjectName>_Util projects come from and why they are constructed 
>> for
> 
>> visual studio 2003 when using the ADD_DEPENDENCIES property of CMake.
>> They do not show up when generating project for other versions of 
>> visual studio and do not show up when using version 2.4.8 of CMake.
>>  
>> What I have done is basically this (pseudo-code, hope it is
> understandable):
>>  
>> PROJECT( FirstProject )
>>  
>> ADD_SUBDIRECTORY( SecondProject ) - adds a library called
> SecondProject.
>> ADD_LIBRARY( FirstProject )
>>
>> ADD_DEPENDENCIES( FirstProject SecondProject )
>>  
>> This will create a solution file with these project in visual studio
>> 2005 and 2008.
>>  
>> ALL_BUILD
>> FirstProject
>> SecondProject
>> ZERO_CHECK
>>  
>> FirstProject depends on SecondProject when checking dependency 
>> setting
> 
>> in visual studio.
>>  
>> However for visual studio 2003 the solution file will look like this.
>>  
>> ALL_BUILD
>> FirstProject
>> SecondProject
>> SecondProject_UTIL
>> ZERO_CHECK
>>  
>> FirstProject will depend on SecondProject_UTIL which depends on 
>> SecondProject. This will of course give a lot of linking errors when 
>> building. Firstly because the _UTIL project is empty, neither 
>> Pre-Build Events nor Post-Build Events are set. Secondly because the 
>> _UTIL project is never built by default.
>>  
>> In order to fix this I have to manually correct the dependencies for 
>> visual studio 2003. Pretty irritating since when anything is changed 
>> in the CMakeLists used for generating the solution file the 
>> dependencies has to be fixed again.
>>  
>> Every project that some other project is dependent on generates this 
>> extra _UTIL project.
>>  
>> Hope anyone can shed some light on the use of this or have 
>> encountered
> 
>> the problem.
>>  
>> best regards, appreciate any help,
>> Markus
> 
> HMMM....
> 
> This was done to avoid something you seem to have been depending on.  
> If you depend on a project directly with static libraries vs 2003 
> creates a combined library.  So, in your case FirstProject would have 
> all the objects of FirstProject and SecondProject in it.  This does 
> not happen on any other platform.  The only thing the add_dependencies

> is supposed to do is make sure that FirstProject is BUILT before 
> SecondProject.  It is not supposed to combine them.  This was a bug in
earlier versions of
> CMake.   Also, for VS 2008 this does not happen.  However, if this is
a 
> full CMake project then it should not be a problem since anything that

> links to FirstProject will automatically link to SecondProject.
> 
> -Bill
> _______________________________________________
> CMake mailing list
> CMake at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake



More information about the CMake mailing list