[CMake] Cmake 2.6.0 release and _Util project on Visual studio 2003
Brad King
brad.king at kitware.com
Fri May 9 09:05:11 EDT 2008
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