This is exactly what I wanted, and the results were incredible. Thank you.
I'll patch all my installs with this and hope it gets in a public release soon. Leif Walsh <leif.wa...@gmail.com> writes: > Cool, thanks. I'll try this! > > Sent from my iPhone > > On Oct 26, 2012, at 8:43, Brad King <brad.k...@kitware.com> wrote: > >> Add target property LINK_DEPENDS_NO_SHARED and initialization variable >> CMAKE_LINK_DEPENDS_NO_SHARED to enable this behavior. >> >> Suggested-by: Leif Walsh <leif.wa...@gmail.com> >> --- >> >> On 08/03/2012 04:57 PM, Leif Walsh wrote: >>> On 3 Aug, 2012, at 4:44 PM, Andreas Pakulat <ap...@gmx.de> wrote: >>>> Actually no, adding new public API, changing existing API in >>>> compatible ways are things you can do with a shared library which >>>> needs relinking. >>> >>> Not without changing the header files, which forces >>> recompilation. As the author of a shared library, your header >>> files are your contract with your clients. >> >> Great point. Please try this patch on top of 2.8.10-rc3. >> Then build with -DCMAKE_LINK_DEPENDS_NO_SHARED=1 or add >> >> set(CMAKE_LINK_DEPENDS_NO_SHARED 1) >> >> to the top of your project. >> >> -Brad >> >> Source/cmComputeLinkInformation.cxx | 10 +++++++++- >> Source/cmComputeLinkInformation.h | 1 + >> Source/cmDocumentVariables.cxx | 9 +++++++++ >> Source/cmTarget.cxx | 17 +++++++++++++++++ >> 4 files changed, 36 insertions(+), 1 deletion(-) >> >> diff --git a/Source/cmComputeLinkInformation.cxx >> b/Source/cmComputeLinkInformation.cxx >> index cd3ef59..d8ffb5e 100644 >> --- a/Source/cmComputeLinkInformation.cxx >> +++ b/Source/cmComputeLinkInformation.cxx >> @@ -277,6 +277,10 @@ cmComputeLinkInformation >> this->UseImportLibrary = >> this->Makefile->GetDefinition("CMAKE_IMPORT_LIBRARY_SUFFIX")?true:false; >> >> + // Check whether we should skip dependencies on shared library files. >> + this->LinkDependsNoShared = >> + this->Target->GetPropertyAsBool("LINK_DEPENDS_NO_SHARED"); >> + >> // On platforms without import libraries there may be a special flag >> // to use when creating a plugin (module) that obtains symbols from >> // the program that will load it. >> @@ -650,7 +654,11 @@ void cmComputeLinkInformation::AddItem(std::string >> const& item, cmTarget* tgt) >> >> // Pass the full path to the target file. >> std::string lib = tgt->GetFullPath(config, implib, true); >> - this->Depends.push_back(lib); >> + if(!this->LinkDependsNoShared || >> + tgt->GetType() != cmTarget::SHARED_LIBRARY) >> + { >> + this->Depends.push_back(lib); >> + } >> >> this->AddTargetItem(lib, tgt); >> this->AddLibraryRuntimeInfo(lib, tgt); >> diff --git a/Source/cmComputeLinkInformation.h >> b/Source/cmComputeLinkInformation.h >> index f60f8d3..e0078af 100644 >> --- a/Source/cmComputeLinkInformation.h >> +++ b/Source/cmComputeLinkInformation.h >> @@ -82,6 +82,7 @@ private: >> // Configuration information. >> const char* Config; >> const char* LinkLanguage; >> + bool LinkDependsNoShared; >> >> // Modes for dealing with dependent shared libraries. >> enum SharedDepMode >> diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx >> index 8db0e8f..55d70f8 100644 >> --- a/Source/cmDocumentVariables.cxx >> +++ b/Source/cmDocumentVariables.cxx >> @@ -1222,6 +1222,15 @@ void cmDocumentVariables::DefineVariables(cmake* cm) >> "Variables that Control the Build"); >> >> cm->DefineProperty >> + ("CMAKE_LINK_DEPENDS_NO_SHARED", cmProperty::VARIABLE, >> + "Whether to skip link dependencies on shared library files.", >> + "This variable initializes the LINK_DEPENDS_NO_SHARED " >> + "property on targets when they are created. " >> + "See that target property for additional information.", >> + false, >> + "Variables that Control the Build"); >> + >> + cm->DefineProperty >> ("CMAKE_AUTOMOC", cmProperty::VARIABLE, >> "Whether to handle moc automatically for Qt targets.", >> "This variable is used to initialize the " >> diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx >> index 423b350..9cfcb63 100644 >> --- a/Source/cmTarget.cxx >> +++ b/Source/cmTarget.cxx >> @@ -651,6 +651,22 @@ void cmTarget::DefineProperties(cmake *cm) >> "custom Makefile link rules."); >> >> cm->DefineProperty >> + ("LINK_DEPENDS_NO_SHARED", cmProperty::TARGET, >> + "Do not depend on linked shared library files.", >> + "Set this property to true to tell CMake generators not to add " >> + "file-level dependencies on the shared library files linked by " >> + "this target. " >> + "Modification to the shared libraries will not be sufficient to " >> + "re-link this target. " >> + "Logical target-level dependencies will not be affected so the " >> + "linked shared libraries will still be brought up to date before " >> + "this target is built." >> + "\n" >> + "This property is initialized by the value of the variable " >> + "CMAKE_LINK_DEPENDS_NO_SHARED if it is set when a target is " >> + "created."); >> + >> + cm->DefineProperty >> ("LINK_INTERFACE_LIBRARIES", cmProperty::TARGET, >> "List public interface libraries for a shared library or executable.", >> "By default linking to a shared library target transitively " >> @@ -1314,6 +1330,7 @@ void cmTarget::SetMakefile(cmMakefile* mf) >> this->SetPropertyDefault("OSX_ARCHITECTURES", 0); >> this->SetPropertyDefault("AUTOMOC", 0); >> this->SetPropertyDefault("AUTOMOC_MOC_OPTIONS", 0); >> + this->SetPropertyDefault("LINK_DEPENDS_NO_SHARED", 0); >> this->SetPropertyDefault("LINK_INTERFACE_LIBRARIES", 0); >> this->SetPropertyDefault("WIN32_EXECUTABLE", 0); >> this->SetPropertyDefault("MACOSX_BUNDLE", 0); >> -- >> 1.7.10.4 >> -- Cheers, Leif -- 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