Ver Fonte

EXCLUDE_FROM_ALL: Don't warn if installing target excluded from all

The original warning pre-dates support for install components.
There are now legitimate scenarios where an install(TARGETS)
command may list a target that is excluded from all, e.g.
hierarchical projects that will never install the component such a
target belongs to.

Fixes: #18938
Craig Scott há 6 anos atrás
pai
commit
d3b765d451

+ 10 - 2
Help/prop_tgt/EXCLUDE_FROM_ALL.rst

@@ -6,8 +6,16 @@ Exclude the target from the all target.
 A property on a target that indicates if the target is excluded from
 the default build target.  If it is not, then with a Makefile for
 example typing make will cause this target to be built.  The same
-concept applies to the default build of other generators.  Installing
-a target with EXCLUDE_FROM_ALL set to true has undefined behavior.
+concept applies to the default build of other generators.
+
+With ``EXCLUDE_FROM_ALL`` set to false or not set at all, the target
+will be brought up to date as part of doing a ``make install`` or its
+equivalent for the CMake generator being used.  If a target has
+``EXCLUDE_FROM_ALL`` set to true, then any attempt to install that
+target has undefined behavior.  Note that such a target can still safely
+be listed in an :command:`install(TARGETS)` command as long as the install
+components the target belongs to are not part of the set of components
+that anything tries to install.
 
 This property is enabled by default for targets that are created in
 directories that have :prop_dir:`EXCLUDE_FROM_ALL` set to ``TRUE``.

+ 4 - 0
Help/release/3.14.rst

@@ -370,3 +370,7 @@ Other Changes
   :variable:`CPACK_DEBIAN_ARCHIVE_TYPE` variable, because ``dpkg`` has
   never supported the PAX tar format. The ``paxr`` value will be mapped
   to ``gnutar`` and a deprecation message emitted.
+
+* CMake no longer issues a warning if a target listed in an
+  :command:`install(TARGETS)` command has its :prop_tgt:`EXCLUDE_FROM_ALL`
+  property set to true.

+ 0 - 16
Source/cmInstallTargetGenerator.cxx

@@ -41,22 +41,6 @@ cmInstallTargetGenerator::cmInstallTargetGenerator(
 
 cmInstallTargetGenerator::~cmInstallTargetGenerator() = default;
 
-void cmInstallTargetGenerator::GenerateScript(std::ostream& os)
-{
-  // Warn if installing an exclude-from-all target.
-  if (this->Target->GetPropertyAsBool("EXCLUDE_FROM_ALL")) {
-    std::ostringstream msg;
-    msg << "WARNING: Target \"" << this->Target->GetName()
-        << "\" has EXCLUDE_FROM_ALL set and will not be built by default "
-        << "but an install rule has been provided for it.  CMake does "
-        << "not define behavior for this case.";
-    cmSystemTools::Message(msg.str(), "Warning");
-  }
-
-  // Perform the main install script generation.
-  this->cmInstallGenerator::GenerateScript(os);
-}
-
 void cmInstallTargetGenerator::GenerateScriptForConfig(
   std::ostream& os, const std::string& config, Indent indent)
 {

+ 0 - 1
Source/cmInstallTargetGenerator.h

@@ -69,7 +69,6 @@ public:
   cmListFileBacktrace const& GetBacktrace() const { return this->Backtrace; }
 
 protected:
-  void GenerateScript(std::ostream& os) override;
   void GenerateScriptForConfig(std::ostream& os, const std::string& config,
                                Indent indent) override;
   void GenerateScriptForConfigObjectLibrary(std::ostream& os,

+ 0 - 1
Tests/RunCMake/install/TARGETS-OPTIONAL-stderr.txt

@@ -1 +0,0 @@
-^WARNING: Target "notall" has EXCLUDE_FROM_ALL set and will not be built by default but an install rule has been provided for it\.  CMake does not define behavior for this case\.$