mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-01 03:11:08 -06:00
When targeting the GNU ABI, we consider `.a` libraries first but also
accept `.lib`. For symmetry, when targeting the MSVC ABI, we now
consider `.lib` first but also accept `.a`.
This adds support for meson-generated static libraries, which are named
with the pattern `lib${foo}.a`:
* https://mesonbuild.com/FAQ.html#why-does-building-my-project-with-msvc-output-static-libraries-called-libfooa
Note that this was previously attempted by
* commit be848a71b0 (MSVC: Teach find_library to consider the 'libfoo.a'
naming convention, 2022-09-19, v3.25.0-rc1~111^2)
but was reverted by
* commit 955d6245c1 (MSVC: Revert "Teach find_library to consider the
'libfoo.a' naming convention", 2022-11-28, v3.25.1~6^2)
due to problems finding GNU ABI libraries in PATH-derived prefixes.
Since then,
* commit 0a81110b84 (find_(library|file|path): Drop PATH-derived search
prefixes, 2023-09-14, v3.28.0-rc1~91^2)
removed the problematic search paths, so we can restore this change.
Fixes: #23975
47 lines
1.5 KiB
CMake
47 lines
1.5 KiB
CMake
set(CMAKE_STATIC_LIBRARY_PREFIX "")
|
|
set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib")
|
|
set(CMAKE_SHARED_LIBRARY_PREFIX "") # lib
|
|
if(CMAKE_SYSTEM_NAME STREQUAL "WindowsKernelModeDriver")
|
|
set(CMAKE_SHARED_LIBRARY_SUFFIX ".sys") # .so
|
|
else()
|
|
set(CMAKE_SHARED_LIBRARY_SUFFIX ".dll") # .so
|
|
endif()
|
|
set(CMAKE_IMPORT_LIBRARY_PREFIX "")
|
|
set(CMAKE_IMPORT_LIBRARY_SUFFIX ".lib")
|
|
set(CMAKE_EXECUTABLE_SUFFIX ".exe") # .exe
|
|
set(CMAKE_LINK_LIBRARY_SUFFIX ".lib")
|
|
set(CMAKE_DL_LIBS "")
|
|
set(CMAKE_EXTRA_LINK_EXTENSIONS ".targets")
|
|
|
|
set(CMAKE_FIND_LIBRARY_PREFIXES
|
|
"" # static or import library from MSVC tooling
|
|
"lib" # static library from Meson with MSVC tooling
|
|
)
|
|
set(CMAKE_FIND_LIBRARY_SUFFIXES
|
|
".dll.lib" # import library from Rust toolchain for MSVC ABI
|
|
".lib" # static or import library from MSVC tooling
|
|
".a" # static library from Meson with MSVC tooling
|
|
)
|
|
|
|
# for borland make long command lines are redirected to a file
|
|
# with the following syntax, see Windows-bcc32.cmake for use
|
|
if(CMAKE_GENERATOR MATCHES "Borland")
|
|
set(CMAKE_START_TEMP_FILE "@&&|\n")
|
|
set(CMAKE_END_TEMP_FILE "\n|")
|
|
endif()
|
|
|
|
# for nmake make long command lines are redirected to a file
|
|
# with the following syntax, see Windows-bcc32.cmake for use
|
|
if(CMAKE_GENERATOR MATCHES "NMake")
|
|
set(CMAKE_START_TEMP_FILE "@<<\n")
|
|
set(CMAKE_END_TEMP_FILE "\n<<")
|
|
endif()
|
|
|
|
include(Platform/WindowsPaths)
|
|
|
|
# uncomment these out to debug nmake and borland makefiles
|
|
#set(CMAKE_START_TEMP_FILE "")
|
|
#set(CMAKE_END_TEMP_FILE "")
|
|
#set(CMAKE_VERBOSE_MAKEFILE 1)
|
|
|