[Cmake] RE: [Insight-developers] (ITK) Build Errors terminus. kitware -- W inXP-VC60, library rebuil ds

Miller, James V (Research) millerjv@crd.ge.com
Tue, 18 Mar 2003 10:39:16 -0500


So this goes down as another bug in DevStudio?

Could CMake custom commands be used to force these "static" inter-library
dependencies to trigger? I have been bit by this many times.  Change some
code, rebuild a single target, do not see the change at runtime... all
because the code I changed was in a different target (library) then the one
I rebuilt. For instance, I could change something in DICOMParser, rebuild
IO, (not pay attention to the fact that it didn't rebuild), then jump over
to another application (in a different project) and relink my executable. I
would not expect CMake to make the connection between two different
DevStudio projects, so I do not mind jumping between two projects to build a
library and then build an application.  However, it would be nice if CMake
could protect me from myself where I modify something like DICOMParser but
only tell IO to rebuild.

Usually after I get bit by this I retrain myself to always build using
ALL_BUILD. But I make this pattern of mistakes every few months....



> -----Original Message-----
> From: Bill Hoffman [mailto:bill.hoffman@kitware.com]
> Sent: Monday, March 17, 2003 4:38 PM
> To: Miller, James V (Research); 'Ken Martin'; Miller, James V
> (Research); 'Insight-developers (E-mail)'; 'CMake developers (E-mail)'
> Subject: Re: [Cmake] RE: [Insight-developers] (ITK) Build Errors
> terminus.kitware -- W inXP-VC60, library rebuil ds
> 
> 
> OK, With DevStudo 6 and 7, static libraries can not depend on 
> other static libraries.   By adding the dependency, it causes 
> the project to link the two libraries together.
> 
> So, if you have this:
> 
> libA dependsOn libB, libC
> libB dependsOn libC
> exeC dependsOn libB, libA, libC
> 
> Then when you link exeC, you will get duplicate symbol 
> warnings, because
> it will have the .o files from C duplicated in libB and libA.
> 
> So, with visual studio 6 and 7, you can not chain static libraries.
> However, if you build an executable that uses the libraries, it will
> chain correctly.
> 
> If you did the "add files to project", for all the depend 
> information, you
> would see the problem.   If you only do it for one of them it 
> appears to work,
> but if you look closely, you will see that it is creating 
> combo libraries.
> 
> So, for your example, if you built IOTests, it would 
> correctly build both
> the DICOMParser and the IO library.   But, building the IO 
> library will
> not cause the DICOMParser to rebuild.
> 
> 
> -Bill
> 
> 
> At 04:02 PM 3/17/2003, Miller, James V (Research) wrote:
> >Well here a test that I ran the other day.  It happens to 
> mimic the problem that Matt was having.  In ITK, there is a 
> library under Utilities called DICOMParser.  In Code/IO is 
> there is a class that uses this library called 
> itkDICOMImageIO2. If I make a change to 
> Utilities/DICOMParser/DICOMFile.cxx and tell DevStudio to 
> rebuild the IO library, it does not recompile DICOMFile.cxx.  
> It instead thinks that Utilities/DICOMParser is up to date 
> and links the IO library using the old DICOMParser lib.
> > 
> >Matt added the DICOMParser library to the IO project using 
> "Add Files To Project..." and then a change to DICOMFile.cxx 
> does cause the IO library to build.
> > 
> >Otherwise, I would fathom that you are correct in that the 
> incremental linker is trying to incrementally link an old 
> executable with a new library and complaining.
> > 
> >Sorry for the specific example. But I am in the rush to talk 
> to someone.....
> > 
> >Jim
> > 
> >-----Original Message-----
> >From: Ken Martin [mailto:ken.martin@kitware.com]
> >Sent: Monday, March 17, 2003 3:11 PM
> >To: 'Miller, James V (Research)'; 'Insight-developers 
> (E-mail)'; 'CMake developers (E-mail)'
> >Subject: RE: [Insight-developers] (ITK) Build Errors 
> terminus.kitware -- WinXP-VC60, library rebuil ds
> >
> >I just checked and as far as I can see CMake is setting up 
> the target dependencies (and chaining them) correctly for 
> both VS6 and VC7. (it is easy to verify from VS just look at 
> the project dependencies). Having seen this type of problem 
> before on occasion, my suspicion is that this is a bug in the 
> VS incremental linker or VS dependency checks.  Unfortunately 
> the offending dashboard was cleaned so there is little 
> remaining evidence. Looking at the dashboard it seems clear 
> that ITKCommon was rebuilt (the symbols are missing as they 
> should be) the problem seems to be that some examples still 
> think that the symbols should be there. So either the 
> executable is screwed up (VS is trying to relink the 
> executable) or the specific test .obj file (Smooth something 
> or another in this case) has not been rebuilt, but that is a 
> VS dependency issue. It would have been nice if we could have 
> checked if the Smooth&obj was up to date or not.
> >
> > 
> >
> >Ken
> >
> > 
> >
> > 
> >
> >-----Original Message-----
> >From: insight-developers-admin@public.kitware.com 
> [mailto:insight-developers-admin@public.kitware.com] On 
> Behalf Of Miller, James V (Research)
> >Sent: Monday, March 17, 2003 2:18 PM
> >To: Insight-developers (E-mail); CMake developers (E-mail)
> >Subject: [Insight-developers] (ITK) Build Errors 
> terminus.kitware -- WinXP-VC60, library rebuil ds
> >
> > 
> >
> >The build errors on terminus.kitware are referencing methods 
> that I removed from the system on Friday.  These symbols were 
> never used, so I deleted them to simplify the code.
> >
> > 
> >
> >Since we have these build errors, it looks VC6 did not 
> rebuild all the libraries or an old object file is lying around.
> >
> > 
> >
> >The reason I bring this up on the list(s) is that we have 
> had a lot of problems recently with VC6 building applications 
> (examples) where the dependent libraries are not being 
> rebuilt.  Here is an example:  change some code in library A. 
>  Library B links with library A.  Executable C links with 
> library B.  If you just tell VC6 to build executable C, then 
> library A does not get rebuilt.  If you build from the top 
> using the ALL_BUILD target, then everything works fine. I 
> think Matt discovered if he added the other libraries to the 
> particular projects (using "Add files to project"), then the 
> rebuilds are triggered properly.  However, this information 
> is lost the next time CMake is run.
> >
> >Have other people seen this? Can CMake add the link 
> libraries that an executable uses that are also built by the 
> workspace to the dependent projects? Or is this necessary?
> >
> >I think I have seen this same behavior on VC7.
> >
> >Jim Miller 
> >_____________________________________
> >Visualization & Computer Vision
> >GE Research
> >Bldg. KW, Room C218B
> >P.O. Box 8, Schenectady NY 12301
> >
> ><mailto:millerjv@research.ge.com>millerjv@research.ge.com
> >
> >james.miller@research.ge.com
> >(518) 387-4005, Dial Comm: 8*833-4005, 
> >Cell: (518) 505-7065, Fax: (518) 387-6981 
> >
> > 
> >
> > 
> 
> 
>