Obtendo o Código-Fonte
Baixe o arquivo compactado da libcurl mais recente e extraia-o em um diretório de sua preferência.
Compilando via NMake
Abra o "Prompt de Comando do Desenvolvedor" do Visual Studio e navegue até a subpasta winbuild dentro do diretório extraído da libcurl.
Uma conisderação importante é a configuração da biblioteca de execução (Runtime Library) do compilador. No Visual Studio, as opções /MT e /MD definem se a aplicação usará a versão estática ou dinâmica da CRT (C Runtime). Ao adicionar RTLIBCFG=static no comando NMake, a libcurl será compilada com a opção /MT; caso contrário, será /MD.
nmake /f Makefile.vc mode=static VC=12 RTLIBCFG=static
Após a conclusão, os artefatos de compilação ficarão disponíveis na pasta builds. Os diretórios relevantes são include e lib, localizados dentro de um caminho semelhante a builds/libcurl-vc12-x86-release-static-ipv6-sspi-winssl.
Exemplo de Utilização
No seu projeto, certifique-se de configurar a opção de Runtime Library para /MT em: Propriedades do Projeto → C/C++ → Geração de Código → Biblioteca de Tempo de Execução.
#define CURL_STATICLIB
#include <iostream>
#include <curl.h>
#pragma comment(lib, "libcurl_a.lib")
size_t receber_dados(char* conteudo, size_t tamanho, size_t blocos, void* contexto)
{
std::cout << "Bytes recebidos: " << (tamanho * blocos) << std::endl;
std::cout << conteudo << std::endl;
int* contador = static_cast<int*>(contexto);
(*contador)++;
return tamanho * blocos;
}
int main()
{
curl_global_init(CURL_GLOBAL_DEFAULT);
CURL* requisicao = curl_easy_init();
if (!requisicao) {
return 1;
}
int chamadas = 0;
curl_easy_setopt(requisicao, CURLOPT_URL, "http://example.com");
curl_easy_setopt(requisicao, CURLOPT_WRITEFUNCTION, receber_dados);
curl_easy_setopt(requisicao, CURLOPT_WRITEDATA, &chamadas);
CURLcode resultado = curl_easy_perform(requisicao);
if (resultado != CURLE_OK) {
std::cerr << "Erro: " << curl_easy_strerror(resultado) << std::endl;
}
curl_easy_cleanup(requisicao);
curl_global_cleanup();
return 0;
}
Parâmetros de Configuração do Makefile
nmake /f Makefile.vc mode=<static ou dll> <opções>
Opções disponíveis:
VC=<6,7,8,9,10,11,12,14> - Versão do Visual Studio
WITH_DEVEL=<caminho> - Caminho para dependências (SSL, zlib, etc.)
WITH_SSL=<dll ou static> - Suporte a OpenSSL
WITH_MBEDTLS=<dll ou static> - Suporte a mbedTLS
WITH_CARES=<dll ou static> - Suporte a c-ares
WITH_ZLIB=<dll ou static> - Suporte a zlib
WITH_SSH2=<dll ou static> - Suporte a libSSH2
ENABLE_SSPI=<yes ou no> - Suporte a SSPI (padrão: yes)
ENABLE_IPV6=<yes ou no> - Suporte a IPv6 (padrão: yes)
ENABLE_IDN=<yes ou no> - Uso de APIs IDN do Windows (padrão: yes)
ENABLE_WINSSL=<yes ou no> - Suporte nativo a SSL do Windows (padrão: yes)
GEN_PDB=<yes ou no> - Gerar símbolos de depuração
DEBUG=<yes ou no> - Build de depuração
MACHINE=<x86 ou x64> - Arquitetura alvo (padrão: x86)
Compilação Simplificada
nmake /f Makefile.vc mode=static VC=12 RTLIBCFG=static ENABLE_IPV6=no ENABLE_WINSSL=no ENABLE_SSPI=no