diff options
author | Brad King <brad.king@kitware.com> | 2021-10-14 16:40:25 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2021-10-14 17:15:48 (GMT) |
commit | 7df0541055167d556d866000f8da4b0e7f186b92 (patch) | |
tree | 20380eb5841fbb0c945901b131541652f17f6ef8 | |
parent | 1c12694124aedc0f7cf5a98e635e27d4c338fce0 (diff) | |
download | CMake-7df0541055167d556d866000f8da4b0e7f186b92.zip CMake-7df0541055167d556d866000f8da4b0e7f186b92.tar.gz CMake-7df0541055167d556d866000f8da4b0e7f186b92.tar.bz2 |
Add property to mark IMPORTED targets as not SYSTEM
Add an `IMPORTED_NO_SYSTEM` target property to specify this. When
enabled, do not treat the `INTERFACE_INCLUDE_DIRECTORIES` of an imported
target as `SYSTEM` include directories.
This is similar to the existing `NO_SYSTEM_FROM_IMPORTED` property, but
works from the consumed target rather than the consumer.
Fixes: #17364
-rw-r--r-- | Help/manual/cmake-properties.7.rst | 1 | ||||
-rw-r--r-- | Help/prop_tgt/IMPORTED_NO_SYSTEM.rst | 15 | ||||
-rw-r--r-- | Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst | 3 | ||||
-rw-r--r-- | Help/release/dev/imported-no-system.rst | 7 | ||||
-rw-r--r-- | Source/cmGeneratorTarget.cxx | 3 | ||||
-rw-r--r-- | Tests/IncludeDirectories/CMakeLists.txt | 7 |
6 files changed, 36 insertions, 0 deletions
diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst index bb5dba3..435b2c6 100644 --- a/Help/manual/cmake-properties.7.rst +++ b/Help/manual/cmake-properties.7.rst @@ -239,6 +239,7 @@ Properties on Targets /prop_tgt/IMPORTED_LOCATION_CONFIG /prop_tgt/IMPORTED_NO_SONAME /prop_tgt/IMPORTED_NO_SONAME_CONFIG + /prop_tgt/IMPORTED_NO_SYSTEM /prop_tgt/IMPORTED_OBJECTS /prop_tgt/IMPORTED_OBJECTS_CONFIG /prop_tgt/IMPORTED_SONAME diff --git a/Help/prop_tgt/IMPORTED_NO_SYSTEM.rst b/Help/prop_tgt/IMPORTED_NO_SYSTEM.rst new file mode 100644 index 0000000..e9349db --- /dev/null +++ b/Help/prop_tgt/IMPORTED_NO_SYSTEM.rst @@ -0,0 +1,15 @@ +IMPORTED_NO_SYSTEM +------------------ + +Specifies that an :ref:`Imported Target <Imported Targets>` is not +a ``SYSTEM`` library. This has the following effects: + +* Entries of :prop_tgt:`INTERFACE_INCLUDE_DIRECTORIES` are not treated + as ``SYSTEM`` include directories when compiling consumers, as they + would be by default. + +Ignored for non-imported targets. + +See the :prop_tgt:`NO_SYSTEM_FROM_IMPORTED` target property to set this +behavior on the target consuming the include directories rather than +providing them. diff --git a/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst b/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst index 880343d..e5cc09b 100644 --- a/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst +++ b/Help/prop_tgt/NO_SYSTEM_FROM_IMPORTED.rst @@ -13,3 +13,6 @@ imported targets as system includes. This property is initialized by the value of the :variable:`CMAKE_NO_SYSTEM_FROM_IMPORTED` variable if it is set when a target is created. + +See the :prop_tgt:`IMPORTED_NO_SYSTEM` target property to set this behavior +on the target providing the include directories rather than consuming them. diff --git a/Help/release/dev/imported-no-system.rst b/Help/release/dev/imported-no-system.rst new file mode 100644 index 0000000..a35e8bb --- /dev/null +++ b/Help/release/dev/imported-no-system.rst @@ -0,0 +1,7 @@ +imported-no-system +------------------ + +* The :prop_tgt:`IMPORTED_NO_SYSTEM` target property was added to + specify that an :ref:`Imported Target <Imported Targets>` should + not be treated as a system library (i.e. its include directories + are not automatically ``SYSTEM``). diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index 8033ef5..fc02a47 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -747,6 +747,9 @@ void handleSystemIncludesDep(cmLocalGenerator* lg, if (!depTgt->IsImported() || excludeImported) { return; } + if (depTgt->GetPropertyAsBool("IMPORTED_NO_SYSTEM")) { + return; + } if (cmValue dirs = depTgt->GetProperty("INTERFACE_INCLUDE_DIRECTORIES")) { cmExpandList(cmGeneratorExpression::Evaluate(*dirs, lg, config, headTarget, diff --git a/Tests/IncludeDirectories/CMakeLists.txt b/Tests/IncludeDirectories/CMakeLists.txt index 4c488e6..efbcb7e 100644 --- a/Tests/IncludeDirectories/CMakeLists.txt +++ b/Tests/IncludeDirectories/CMakeLists.txt @@ -115,6 +115,13 @@ add_library(ordertest ordertest.cpp) target_include_directories(ordertest SYSTEM PUBLIC SystemIncludeDirectories/systemlib) target_include_directories(ordertest PUBLIC SystemIncludeDirectories/userlib) +add_library(ordertest2 ordertest.cpp) +target_include_directories(ordertest2 SYSTEM PRIVATE SystemIncludeDirectories/systemlib) +target_link_libraries(ordertest2 PRIVATE ordertest2_userlib) +add_library(ordertest2_userlib INTERFACE IMPORTED) +target_include_directories(ordertest2_userlib INTERFACE SystemIncludeDirectories/userlib) +set_property(TARGET ordertest2_userlib PROPERTY IMPORTED_NO_SYSTEM 1) + add_subdirectory(StandardIncludeDirectories) add_subdirectory(TargetIncludeDirectories) |