From 79b282425185b70426716f23feb06e7e9e6ed752 Mon Sep 17 00:00:00 2001 From: "Alan W. Irwin" Date: Sat, 24 Aug 2019 12:44:36 -0700 Subject: 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 --- Help/manual/cmake-variables.7.rst | 2 ++ Help/release/dev/per-lang-link-library-flag.rst | 10 ++++++---- Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst | 8 ++++++++ Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst | 6 ++++++ Source/cmComputeLinkInformation.cxx | 18 ++++++++++++++---- 5 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst create mode 100644 Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst index 9ad1195..8cefca6 100644 --- a/Help/manual/cmake-variables.7.rst +++ b/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 diff --git a/Help/release/dev/per-lang-link-library-flag.rst b/Help/release/dev/per-lang-link-library-flag.rst index ca1181d..4f5966d 100644 --- a/Help/release/dev/per-lang-link-library-flag.rst +++ b/Help/release/dev/per-lang-link-library-flag.rst @@ -1,7 +1,9 @@ per-lang-link-library-flag -------------------------- -* The new :variable:`CMAKE__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__LINK_LIBRARY_FLAG`, + :variable:`CMAKE__LINK_LIBRARY_FILE_FLAG`, and + :variable:`CMAKE__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. diff --git a/Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst b/Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst new file mode 100644 index 0000000..d54f080 --- /dev/null +++ b/Help/variable/CMAKE_LANG_LINK_LIBRARY_FILE_FLAG.rst @@ -0,0 +1,8 @@ +CMAKE__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. diff --git a/Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst b/Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst new file mode 100644 index 0000000..a378657 --- /dev/null +++ b/Help/variable/CMAKE_LANG_LINK_LIBRARY_SUFFIX.rst @@ -0,0 +1,6 @@ +CMAKE__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. diff --git a/Source/cmComputeLinkInformation.cxx b/Source/cmComputeLinkInformation.cxx index 880d5c0..dd8d246 100644 --- a/Source/cmComputeLinkInformation.cxx +++ b/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; -- cgit v0.12