Sfoglia il codice sorgente

cmTarget: Don't update IMPORTED target compilation properties

The include_directories() and add_compile_options() commands
should not append to the corresponding target property for IMPORTED
targets.  This is already the case for add_definitions().
Stephen Kelly 12 anni fa
parent
commit
272a20f8e5

+ 1 - 1
Source/cmMakefile.cxx

@@ -4045,8 +4045,8 @@ cmMakefile::AddImportedTarget(const char* name, cmTarget::TargetType type,
   // Create the target.
   cmsys::auto_ptr<cmTarget> target(new cmTarget);
   target->SetType(type, name);
-  target->SetMakefile(this);
   target->MarkAsImported();
+  target->SetMakefile(this);
 
   // Add to the set of available imported targets.
   this->ImportedTargets[name] = target.get();

+ 25 - 23
Source/cmTarget.cxx

@@ -330,34 +330,36 @@ void cmTarget::SetMakefile(cmMakefile* mf)
   // Save the backtrace of target construction.
   this->Makefile->GetBacktrace(this->Internal->Backtrace);
 
-  // Initialize the INCLUDE_DIRECTORIES property based on the current value
-  // of the same directory property:
-  const std::vector<cmValueWithOrigin> parentIncludes =
-                              this->Makefile->GetIncludeDirectoriesEntries();
-
-  for (std::vector<cmValueWithOrigin>::const_iterator it
-              = parentIncludes.begin(); it != parentIncludes.end(); ++it)
+  if (!this->IsImported())
     {
-    this->InsertInclude(*it);
-    }
+    // Initialize the INCLUDE_DIRECTORIES property based on the current value
+    // of the same directory property:
+    const std::vector<cmValueWithOrigin> parentIncludes =
+                                this->Makefile->GetIncludeDirectoriesEntries();
 
-  const std::set<cmStdString> parentSystemIncludes =
-                              this->Makefile->GetSystemIncludeDirectories();
+    for (std::vector<cmValueWithOrigin>::const_iterator it
+                = parentIncludes.begin(); it != parentIncludes.end(); ++it)
+      {
+      this->InsertInclude(*it);
+      }
+    const std::set<cmStdString> parentSystemIncludes =
+                                this->Makefile->GetSystemIncludeDirectories();
 
-  for (std::set<cmStdString>::const_iterator it
-        = parentSystemIncludes.begin();
-        it != parentSystemIncludes.end(); ++it)
-    {
-    this->SystemIncludeDirectories.insert(*it);
-    }
+    for (std::set<cmStdString>::const_iterator it
+          = parentSystemIncludes.begin();
+          it != parentSystemIncludes.end(); ++it)
+      {
+      this->SystemIncludeDirectories.insert(*it);
+      }
 
-  const std::vector<cmValueWithOrigin> parentOptions =
-                              this->Makefile->GetCompileOptionsEntries();
+    const std::vector<cmValueWithOrigin> parentOptions =
+                                this->Makefile->GetCompileOptionsEntries();
 
-  for (std::vector<cmValueWithOrigin>::const_iterator it
-              = parentOptions.begin(); it != parentOptions.end(); ++it)
-    {
-    this->InsertCompileOption(*it);
+    for (std::vector<cmValueWithOrigin>::const_iterator it
+                = parentOptions.begin(); it != parentOptions.end(); ++it)
+      {
+      this->InsertCompileOption(*it);
+      }
     }
 
   if (this->GetType() != INTERFACE_LIBRARY)

+ 7 - 0
Tests/CMakeCommands/add_compile_options/CMakeLists.txt

@@ -12,3 +12,10 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
       "DO_GNU_TESTS"
   )
 endif()
+
+add_compile_options(-rtti)
+add_library(imp UNKNOWN IMPORTED)
+get_target_property(_res imp COMPILE_OPTIONS)
+if (_res)
+  message(SEND_ERROR "add_compile_options populated the COMPILE_OPTIONS target property")
+endif()

+ 7 - 0
Tests/CMakeCommands/target_compile_definitions/CMakeLists.txt

@@ -25,3 +25,10 @@ target_compile_definitions(consumer
 target_compile_definitions(consumer
   PRIVATE
 )
+
+add_definitions(-DSOME_DEF)
+add_library(imp UNKNOWN IMPORTED)
+get_target_property(_res imp COMPILE_DEFINITIONS)
+if (_res)
+  message(SEND_ERROR "add_definitions populated the COMPILE_DEFINITIONS target property")
+endif()

+ 7 - 0
Tests/CMakeCommands/target_include_directories/CMakeLists.txt

@@ -62,3 +62,10 @@ target_include_directories(consumer
 target_include_directories(consumer
   SYSTEM PRIVATE
 )
+
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+add_library(imp UNKNOWN IMPORTED)
+get_target_property(_res imp INCLUDE_DIRECTORIES)
+if (_res)
+  message(SEND_ERROR "include_directories populated the INCLUDE_DIRECTORIES target property")
+endif()