find_library ignores libcurl.lib on Windows
CMake test code:
pkg_search_module(CURL libcurl)
find_library(LIBCURL_FILE NAMES ${CURL_LIBRARIES} HINTS "${CURL_LIBDIR}")
MESSAGE(STATUS "file = ${LIBCURL_FILE}")
MESSAGE(STATUS "CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES = ${CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES}")
MESSAGE(STATUS "CMAKE_FIND_LIBRARY_PREFIXES = ${CMAKE_FIND_LIBRARY_PREFIXES}")
MESSAGE(STATUS "CMAKE_FIND_LIBRARY_SUFFIXES = ${CMAKE_FIND_LIBRARY_SUFFIXES}")
Static lib
Standard static library Windows location (with -lcurl
in libcurl.pc file):
...
Building Custom Rule C:/curl-7_56_0-src/CMakeLists.txt
CMake does not need to re-run because C:/curl-7_56_0-src/build/CMakeFiles/generate.stamp is up-to-date.
-- Install configuration: "Release"
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/bin/curl-config
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/lib/pkgconfig/libcurl.pc
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/include/curl
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/include/curl/curl.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/include/curl/curlver.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/include/curl/easy.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/include/curl/mprintf.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/include/curl/multi.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/include/curl/stdcheaders.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/include/curl/system.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/include/curl/typecheck-gcc.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_dll/lib/libcurl.lib
Result:
-- Checking for one of the modules 'libcurl'
-- file = LIBCURL_FILE-NOTFOUND
-- CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES =
-- CMAKE_FIND_LIBRARY_PREFIXES =
-- CMAKE_FIND_LIBRARY_SUFFIXES = .lib
I works after adding SET(CMAKE_FIND_LIBRARY_PREFIXES lib)
:
-- Checking for one of the modules 'libcurl'
-- file = C:/curl-7_56_0/vc141_x64_Release_dll/lib/libcurl.lib
-- CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES =
-- CMAKE_FIND_LIBRARY_PREFIXES = lib
-- CMAKE_FIND_LIBRARY_SUFFIXES = .lib
Dynamic lib
Standard dynamic library Windows location (with -lcurl
in libcurl.pc file):
...
Building Custom Rule C:/curl-7_56_0-src/CMakeLists.txt
CMake does not need to re-run because C:/curl-7_56_0-src/build/CMakeFiles/generate.stamp is up-to-date.
-- Install configuration: "Release"
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/bin/curl-config
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/lib/pkgconfig/libcurl.pc
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/include/curl
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/include/curl/curl.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/include/curl/curlver.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/include/curl/easy.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/include/curl/mprintf.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/include/curl/multi.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/include/curl/stdcheaders.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/include/curl/system.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/include/curl/typecheck-gcc.h
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/lib/libcurl_imp.lib
-- Installing: C:/curl-7_56_0/vc141_x64_Release_lib/bin/libcurl.dll
Result:
-- Checking for one of the modules 'libcurl'
-- file = LIBCURL_FILE-NOTFOUND
-- CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES =
-- CMAKE_FIND_LIBRARY_PREFIXES =
-- CMAKE_FIND_LIBRARY_SUFFIXES = .lib
I works after adding SET(CMAKE_FIND_LIBRARY_PREFIXES lib)
and SET(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} .dll)
:
-- Checking for one of the modules 'libcurl'
-- file = C:/Tools/curl/bin/libcurl.dll
-- CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES =
-- CMAKE_FIND_LIBRARY_PREFIXES = lib
-- CMAKE_FIND_LIBRARY_SUFFIXES = .lib;.dll
Question
Have CMAKE_FIND_LIBRARY_PREFIXES
and CMAKE_FIND_LIBRARY_SUFFIXES
correct default values in CMake on Windows platform?
See also #17136 and #17363