At 05:11 PM 10/11/2006, Eran Guendelman wrote:
>Hi, we are trying to track down why cmake 2.4 is crashing when generating the 
>VisualStudio 7 build files whereas cmake 2.2 worked fine.  I built a debug 
>version of cmake and narrowed it down to the following issue:
>
>In cmLocalGenerator::ComputeLinkInformation it goes through the libraries and 
>tries to add their information to the linkLibraries vector.  It gets to a 
>library called xerces-c_2D.  It checks whether this is a cmake target (using 
>FindTarget), and indeed finds that it is.  So it then has the line
>std::string linkItem = tgt->GetDirectory(0)
>
>This is where the crash occurs, and the cause is as follows.  In our build 
>environment, xerces-c_2D is built as a custom target (see below for why), so 
>its cmTarget::TargetType is UTILITY, and cmTarget::GetDirectory returns 0 in 
>this case.  Hence trying to assign 0 to an std::string causes the crash.
>
>Looking at cmTarget::GetDirectory, my instinct for "fixing" this is to change
>
>default:
>return 0;
>
>to
>
>default:
>this->Directory = "";
>
>so that the subsequent check of if(this->Directory.empty()) will take care of 
>this case.  But then again, I don't really know anything about how this code 
>is supposed to work so this was just a guess (that at least did fix the crash 
>and succeeded in generating project files -- though I haven't tried to build 
>them).
>
>Anyway, as for why we use ADD_CUSTOM_TARGET to build xerces-c_2D, it's because 
>this is a third party library we are trying to build as part of our build 
>system, and since the library came with a VC7 .sln file but no CMakeLists.txt 
>files we basically made its CMakeLists.txt look something like:
>
>ADD_CUSTOM_TARGET(xerces-c_2 ALL devenv 
>${OpenSim_SOURCE_DIR}/Vendors/xerces-c-src2_4_0/Projects/Win32/VC7/xerces-all/xerces-all.sln
> /build Release)
>
>i.e. we build the library by essentially making a system call to visual studio 
>and passing it their supplied .sln.
>
>So basically:
>- If you think GetDirectory could be fixed in a way that correctly handles the 
>UTILITY target type then hopefully that should resolve things and we'll be 
>able to upgrade to cmake 2.4.
>- But if you think one should never try to link to a UTILITY target then we'll 
>need to come up with a different way to incorporate building this third party 
>library as part of our regular build and any pointers to doing this nicer 
>would be appreciated.

So, we should fix the crash of course.

However, if you change the target name to xerces-c_2D_cmake and leave the 
target_link_libraries at xerces-c_2D it should work.  You can use 
add_dependency 
to make the custom target depend on other targets.   I am not sure this was 
really
working for you with cmake 2.2.   It may have been working by luck.   Since this
is not really a cmake target linking to it does not make sense.   I am assuming 
that
the library name is xerces-c_2D?

-Bill

_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to