| Building via IDE Project Files |
| ============================== |
| |
| This document describes how to compile, build and install curl and libcurl |
| from sources using an IDE based development tool such as Visual Studio. |
| |
| Project files are currently available for Visual C++ v6.0 to v15.0. The |
| following directory structure has been used to cater for this: |
| |
| somedirectory\ |
| |_curl |
| |_projects |
| |_<platform> |
| |_<ide> |
| |_lib |
| |_src |
| |
| This structure allows for side-by-side compilation of curl on the same |
| machine using different versions of a given compiler (for example VC8, VC9 |
| and VC10) and allows for your own application or product to be compiled |
| against those variants of libcurl for example. |
| |
| Note: Typically this side-by-side compilation is generally only required |
| when a library is being compiled against dynamic runtime libraries. |
| |
| Dependencies |
| ============ |
| |
| The projects files also support build configurations that require third |
| party dependencies such as OpenSSL, wolfSSL and SSH2. If you wish to support |
| these, you will also need to download and compile those libraries as well. |
| |
| To support compilation of these libraries using different versions of |
| compilers, the following directory structure has been used for both the |
| output of curl and libcurl as well as these dependencies. |
| |
| somedirectory\ |
| |_curl |
| | |_ build |
| | |_<architecture> |
| | |_<ide> |
| | |_<configuration> |
| | |_lib |
| | |_src |
| | |
| |_openssl |
| | |_ build |
| | |_<architecture> |
| | |_VC <version> |
| | |_<configuration> |
| | |
| |_libssh2 |
| |_ build |
| |_<architecture> |
| |_VC <version> |
| |_<configuration> |
| |
| As OpenSSL and wolfSSL don't support side-by-side compilation when using |
| different versions of Visual Studio, build helper batch files have been |
| provided to assist with this. Please run "build-openssl -help" and/or |
| "build-wolfssl -help" for usage details. |
| |
| Building with Visual C++ |
| ======================== |
| |
| To build with VC++, you will of course have to first install VC++ which is |
| part of Visual Studio. |
| |
| If you are building with VC6 then you will also need the February 2003 |
| Edition of the Windows Platform SDK which can be downloaded from: |
| |
| https://www.microsoft.com/en-us/download/details.aspx?id=12261 |
| |
| If you require support for Internationalized Domain Names via Windows IDN |
| then you will need either: |
| |
| * Microsoft Windows SDK Update for Windows Vista: |
| https://www.microsoft.com/en-us/download/details.aspx?id=23719 |
| |
| * Microsoft Visual Studio 2010 or above |
| |
| Once you have VC++ installed you should launch the application and open one |
| of the solution or workspace files. |
| |
| Whilst files are provided for both libcurl and the curl command line tool as |
| well as a configuration that includes both, it is recommend that you use the |
| all-in-one configuration. |
| |
| Running DLL based configurations |
| ================================ |
| |
| If you are a developer and plan to run the curl tool from Visual Studio (eg |
| you are debugging) with any third-party libraries (such as OpenSSL, wolfSSL |
| or LibSSH2) then you will need to add the search path of these DLLs to the |
| configuration's PATH environment. To do that: |
| |
| * Open the 'curl-all.sln' or 'curl.sln' solutions |
| |
| * Right-click on the 'curl' project and select Properties |
| |
| * Navigate to 'Configuration Properties > Debugging > Environment' |
| |
| * Add PATH='Path to DLL';C:\Windows\system32;C:\Windows; |
| C:\Windows\System32\Wbem |
| |
| ... where 'Path to DLL` is the configuration specific path. For example the |
| following configurations in Visual Studio 2010 might be: |
| |
| DLL Debug - DLL OpenSSL (Win32): |
| PATH=..\..\..\..\..\openssl\build\Win32\VC10\DLL Debug;C:\Windows\system32; |
| C:\Windows;C:\Windows\System32\Wbem |
| |
| DLL Debug - DLL OpenSSL (x64): |
| PATH=..\..\..\..\..\openssl\build\Win64\VC10\DLL Debug;C:\Windows\system32; |
| C:\Windows;C:\Windows\System32\Wbem |
| |
| DLL Debug - DLL wolfSSL (Win32): |
| PATH=..\..\..\..\..\wolfssl\build\Win32\VC10\DLL Debug;C:\Windows\system32; |
| C:\Windows;C:\Windows\System32\Wbem |
| |
| DLL Debug - DLL wolfSSL (x64): |
| PATH=..\..\..\..\..\wolfssl\build\Win64\VC10\DLL Debug;C:\Windows\system32; |
| C:\Windows;C:\Windows\System32\Wbem |
| |
| If you are using a configuration that uses multiple third-party library DLLs |
| (such as DLL Debug - DLL OpenSSL - DLL LibSSH2) then 'Path to DLL' will need |
| to contain the path to both of these. |
| |
| Notes |
| ===== |
| |
| The following keywords have been used in the directory hierarchy: |
| |
| <platform> - The platform (For example: Windows) |
| <ide> - The IDE (For example: VC6, VC10, BCC5) |
| <architecture> - The platform architecture (For example: Win32, Win64) |
| <configuration> - The target configuration (For example: DLL Debug, |
| LIB Release - LIB OpenSSL) |
| |
| If you are using the source code from the git repository, rather than a |
| release archive or nightly build, you will need to generate the project |
| files. Please run "generate -help" for usage details. |
| |
| Should you wish to help out with some of the items on the TODO list, or |
| find bugs in the project files that need correcting, and would like to |
| submit updated files back then please note that, whilst the solution files |
| can be edited directly, the templates for the project files (which are |
| stored in the git repository) will need to be modified rather than the |
| generated project files that Visual Studio uses. |
| |
| Legacy Windows and SSL |
| ====================== |
| |
| Some of the project configurations allow the use of Schannel, the native |
| SSL library in Windows which forms part of Windows SSPI. However, Schannel |
| in Windows <= XP is unable to connect to servers that no longer support the |
| legacy handshakes and algorithms used by those versions. If you will be |
| using curl in one of those earlier versions of Windows you should choose |
| another SSL backend such as OpenSSL. |