Sfoglia il codice sorgente

Merge topic 'INTERFACE_SYSTEM_INCLUDE_DIRECTORIES-update'

85857e6d Help: Clarify INTERFACE_SYSTEM_INCLUDE_DIRECTORIES documentation.
ee38062b IncludeDirectories: Respect SYSTEM flag when using CONFIG genex.
Brad King 11 anni fa
parent
commit
154bf8da99

+ 9 - 2
Help/prop_tgt/INTERFACE_SYSTEM_INCLUDE_DIRECTORIES.rst

@@ -7,8 +7,15 @@ Targets may populate this property to publish the include directories
 which contain system headers, and therefore should not result in
 which contain system headers, and therefore should not result in
 compiler warnings.  The :command:`target_include_directories(SYSTEM)`
 compiler warnings.  The :command:`target_include_directories(SYSTEM)`
 command signature populates this property with values given to the
 command signature populates this property with values given to the
-``PUBLIC`` and ``INTERFACE`` keywords.  Projects may also get and set the
-property directly.
+``PUBLIC`` and ``INTERFACE`` keywords.
+
+Projects may also get and set the property directly, but must be aware that
+adding directories to this property does not make those directories used
+during compilation.  Adding directories to this property marks directories
+as ``SYSTEM`` which otherwise would be used in a non-``SYSTEM`` manner.  This
+can appear similar to 'duplication', so prefer the
+high-level :command:`target_include_directories(SYSTEM)` command and avoid
+setting the property by low-level means.
 
 
 When target dependencies are specified using :command:`target_link_libraries`,
 When target dependencies are specified using :command:`target_link_libraries`,
 CMake will read this property from all target dependencies to mark the
 CMake will read this property from all target dependencies to mark the

+ 2 - 1
Source/cmMakefileTargetGenerator.cxx

@@ -1870,7 +1870,8 @@ void cmMakefileTargetGenerator::AddIncludeFlags(std::string& flags,
 
 
   std::string includeFlags =
   std::string includeFlags =
     this->LocalGenerator->GetIncludeFlags(includes, this->GeneratorTarget,
     this->LocalGenerator->GetIncludeFlags(includes, this->GeneratorTarget,
-                                          lang, false, useResponseFile);
+                                          lang, false, useResponseFile,
+                                          config);
   if(includeFlags.empty())
   if(includeFlags.empty())
     {
     {
     return;
     return;

+ 3 - 1
Source/cmNinjaTargetGenerator.cxx

@@ -170,8 +170,10 @@ cmNinjaTargetGenerator::ComputeFlagsForObject(cmSourceFile const* source,
     std::string includeFlags =
     std::string includeFlags =
       this->LocalGenerator->GetIncludeFlags(includes, this->GeneratorTarget,
       this->LocalGenerator->GetIncludeFlags(includes, this->GeneratorTarget,
                                             language,
                                             language,
-      language == "RC" ? true : false); // full include paths for RC
+      language == "RC" ? true : false,  // full include paths for RC
                                         // needed by cmcldeps
                                         // needed by cmcldeps
+                                            false,
+                                            this->GetConfigName());
     if(cmGlobalNinjaGenerator::IsMinGW())
     if(cmGlobalNinjaGenerator::IsMinGW())
       cmSystemTools::ReplaceString(includeFlags, "\\", "/");
       cmSystemTools::ReplaceString(includeFlags, "\\", "/");
 
 

+ 7 - 1
Tests/IncludeDirectories/SystemIncludeDirectories/CMakeLists.txt

@@ -14,8 +14,14 @@ target_include_directories(upstream SYSTEM PUBLIC
   $<TARGET_PROPERTY:systemlib,INTERFACE_INCLUDE_DIRECTORIES>
   $<TARGET_PROPERTY:systemlib,INTERFACE_INCLUDE_DIRECTORIES>
 )
 )
 
 
+add_library(config_specific INTERFACE)
+set(testConfig ${CMAKE_BUILD_TYPE})
+target_include_directories(config_specific SYSTEM INTERFACE
+  "$<$<CONFIG:${testConfig}>:${CMAKE_CURRENT_SOURCE_DIR}/config_specific>"
+)
+
 add_library(consumer consumer.cpp)
 add_library(consumer consumer.cpp)
-target_link_libraries(consumer upstream)
+target_link_libraries(consumer upstream config_specific)
 target_compile_options(consumer PRIVATE -Werror=unused-variable)
 target_compile_options(consumer PRIVATE -Werror=unused-variable)
 
 
 add_library(iface IMPORTED INTERFACE)
 add_library(iface IMPORTED INTERFACE)

+ 14 - 0
Tests/IncludeDirectories/SystemIncludeDirectories/config_specific/config_iface.h

@@ -0,0 +1,14 @@
+
+#ifndef CONFIG_IFACE_H
+#define CONFIG_IFACE_H
+
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int configUnusedFunc()
+{
+  int unused;
+  return 0;
+}
+
+#endif

+ 2 - 0
Tests/IncludeDirectories/SystemIncludeDirectories/consumer.cpp

@@ -1,6 +1,8 @@
 
 
 #include "upstream.h"
 #include "upstream.h"
 
 
+#include "config_iface.h"
+
 int consumer()
 int consumer()
 {
 {
   return upstream();
   return upstream();