Kaynağa Gözat

Add per-lang variants of CMAKE_LINK_LIBRARY_{FILE_FLAG,SUFFIX}

Extend the change from commit 689be6235e (Generator: support
per-language link library flag, 2019-08-08) to cover more link library
command-line flag components.  Allow compilers for different languages
to use different values for these linking-related variables within the
same build.

Closes: #19631
Alan W. Irwin 6 yıl önce
ebeveyn
işleme
79b2824251

+ 2 - 0
Help/manual/cmake-variables.7.rst

@@ -62,6 +62,7 @@ Variables that Provide Information
    /variable/CMAKE_JOB_POOLS
    /variable/CMAKE_LANG_COMPILER_AR
    /variable/CMAKE_LANG_COMPILER_RANLIB
+   /variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX
    /variable/CMAKE_LINK_LIBRARY_SUFFIX
    /variable/CMAKE_LINK_SEARCH_END_STATIC
    /variable/CMAKE_LINK_SEARCH_START_STATIC
@@ -384,6 +385,7 @@ Variables that Control the Build
    /variable/CMAKE_LANG_CPPCHECK
    /variable/CMAKE_LANG_CPPLINT
    /variable/CMAKE_LANG_INCLUDE_WHAT_YOU_USE
+   /variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG
    /variable/CMAKE_LANG_LINK_LIBRARY_FLAG
    /variable/CMAKE_LANG_VISIBILITY_PRESET
    /variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY

+ 6 - 4
Help/release/dev/per-lang-link-library-flag.rst

@@ -1,7 +1,9 @@
 per-lang-link-library-flag
 --------------------------
 
-* The new :variable:`CMAKE_<LANG>_LINK_LIBRARY_FLAG` flag allows you to now
-  control the flag used to specify linking to a library on a per-language basis.
-  This is useful for mixed-language projects where the different drivers may use
-  different flags.
+* New variables :variable:`CMAKE_<LANG>_LINK_LIBRARY_FLAG`,
+  :variable:`CMAKE_<LANG>_LINK_LIBRARY_FILE_FLAG`, and
+  :variable:`CMAKE_<LANG>_LINK_LIBRARY_SUFFIX` allow control of the
+  flag used to specify linking to a library on a per-language basis.
+  This is useful for mixed-language projects where the different
+  drivers may use different flags.

+ 8 - 0
Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst

@@ -0,0 +1,8 @@
+CMAKE_<LANG>_LINK_LIBRARY_FILE_FLAG
+-----------------------------------
+
+Language-specific flag to be used to link a library specified by
+a path to its file.
+
+The flag will be used before a library file path is given to the
+linker.  This is needed only on very few platforms.

+ 6 - 0
Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst

@@ -0,0 +1,6 @@
+CMAKE_<LANG>_LINK_LIBRARY_SUFFIX
+--------------------------------
+
+Language-specific suffix for libraries that you link to.
+
+The suffix to use for the end of a library filename, ``.lib`` on Windows.

+ 14 - 4
Source/cmComputeLinkInformation.cxx

@@ -292,10 +292,20 @@ cmComputeLinkInformation::cmComputeLinkInformation(
     this->LibLinkFlag =
       this->Makefile->GetSafeDefinition("CMAKE_LINK_LIBRARY_FLAG");
   }
-  this->LibLinkFileFlag =
-    this->Makefile->GetSafeDefinition("CMAKE_LINK_LIBRARY_FILE_FLAG");
-  this->LibLinkSuffix =
-    this->Makefile->GetSafeDefinition("CMAKE_LINK_LIBRARY_SUFFIX");
+  if (const char* flag = this->Makefile->GetDefinition(
+        "CMAKE_" + this->LinkLanguage + "_LINK_LIBRARY_FILE_FLAG")) {
+    this->LibLinkFileFlag = flag;
+  } else {
+    this->LibLinkFileFlag =
+      this->Makefile->GetSafeDefinition("CMAKE_LINK_LIBRARY_FILE_FLAG");
+  }
+  if (const char* suffix = this->Makefile->GetDefinition(
+        "CMAKE_" + this->LinkLanguage + "_LINK_LIBRARY_SUFFIX")) {
+    this->LibLinkSuffix = suffix;
+  } else {
+    this->LibLinkSuffix =
+      this->Makefile->GetSafeDefinition("CMAKE_LINK_LIBRARY_SUFFIX");
+  }
 
   // Get options needed to specify RPATHs.
   this->RuntimeUseChrpath = false;