New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CURL_STATIC_CRT no longer works with cmake 3.15 and above #5165
Comments
Seems primarily like a cmake bug to me... Should |
I agree with you that it is a cmake issue - but I think this is mostly because they're trying to improve the vexing issue of handling the Microsoft compiler's setting of the relevant options controlling the C/C++ runtime library. The existing code handling P/R #5167 raised |
The behaviour is controlled by cmake policy If I understand the description of |
That matches my understanding. |
Building curl with -DCURL_STATIC_CRT=ON
Run "x64 Native Tools Command Prompt for VS 2019"
> git clone https://github.com/curl/curl
(on commit 69d5d18)
> md build
> cd build
> cmake -DCURL_STATIC_CRT=ON -DBUILD_SHARED_LIBS=OFF ../curl
> cmake --build . --target curl
I see the following
> dumpbin /imports src\Debug\curl.exe | find ".dll"
WLDAP32.dll
WS2_32.dll
ADVAPI32.dll
KERNEL32.dll
VCRUNTIME140D.dll
ucrtbased.dll
(This is identical with the output when
-DCURL_STATIC_CRT=ON
is not provided)I expected the following
> dumpbin /imports src\Debug\curl.exe | find ".dll"
WLDAP32.dll
WS2_32.dll
ADVAPI32.dll
KERNEL32.dll
curl/libcurl version
> src\Debug\curl.exe -V
curl 7.70.0-DEV (Windows) libcurl/7.70.0-DEV
Release-Date: [unreleased]
Protocols: dict file ftp gopher http imap ldap pop3 rtsp smb smtp telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM
operating system
Windows 10 1909
I am using Visual Studio 16.5.1, and the cmake that is supplied with VS (cmake version 3.16.19112601-MSVC_2)
Analysis
Cmake CMP0091 ( https://cmake.org/cmake/help/git-stage/policy/CMP0091.html ) changes the way CMake on Windows handles the flags controlling the C runtime being used.
Prior to CMake 3.15 the
/MT
or/MTd
flags could simply be added toCMAKE_C_FLAGS_DEBUG
orCMAKE_C_FLAGS_RELEASE
.Starting with CMake 3.15 the
CMAKE_MSVC_RUNTIME_LIBRARY
abstraction should be used instead -- values provided in the other locations are ignored.Possible Solution
Change CMakeLists.txt:
Note: the existing settings should be left in place, for versions of cmake prior to 3.15
The text was updated successfully, but these errors were encountered: