So, basically we this:

set(CMAKE_LINK_INTERFACE_LIBRARIES "")

add_library(libA SHARED classA.cpp)
add_library(libB SHARED classB.cpp)
add_library(libC SHARED classC.cpp)

generate_export_header(libA)
generate_export_header(libB)
generate_export_header(libC)

target_link_libraries(libB libA)
target_link_libraries(libC libA libB)

add_executable(exec
  "main.cpp"
)
target_link_libraries(exec libC )


So, setting CMAKE_LINK_INTERFACE_LIBRARIES to "" is supposed to make the transitive linking of A and B not happen when linking C. I tried adding some print stuff in the code. But, I am not sure where to look.

I added the following:

 void cmTarget::SetPropertyDefault(const char* property,
                                   const char* default_value)
 {
+  bool debug = false;
+  if(strcmp("LINK_INTERFACE_LIBRARIES", property) == 0)
+    debug = true;
+  if(debug) std::cerr << this->GetName() << "\n";
   // Compute the name of the variable holding the default value.
   std::string var = "CMAKE_";
   var += property;
-
+  if(debug) std::cerr << var << "\n";
   if(const char* value = this->Makefile->GetDefinition(var.c_str()))
     {
+    if(debug) std::cerr << "found it " << value << "\n";
     this->SetProperty(property, value);
     }
   else if(default_value)
     {
+    if(debug) std::cerr << "not found " << default_value << "\n";
     this->SetProperty(property, default_value);
     }
 }
diff --git a/Source/cmTargetLinkLibrariesCommand.cxx b/Source/cmTargetLin
kLibrariesCommand.cxx
index 805959d..d2be3fa 100644
--- a/Source/cmTargetLinkLibrariesCommand.cxx
+++ b/Source/cmTargetLinkLibrariesCommand.cxx
@@ -219,6 +219,7 @@ cmTargetLinkLibrariesCommand::HandleLibrary(const cha
r* lib,
   // Handle normal case first.
   if(!this->DoingInterface)
     {
+    std::cerr << this->Target->GetName() << " Not doing interface" << "\
n";
     this->Makefile


I ended up with this:

libA
CMAKE_LINK_INTERFACE_LIBRARIES
found it
libB
CMAKE_LINK_INTERFACE_LIBRARIES
found it
libC
CMAKE_LINK_INTERFACE_LIBRARIES
found it


libB Not doing interface
libC Not doing interface
libC Not doing interface


Do you have other prints that I should add?  How is this supposed to work?

-Bill

--

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://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to