Crow C++ é um framework C++ para criar serviços web HTTP ou Websocket. Ele usa roteamento semelhante ao Flask do Python, o que facilita o uso.
Para mais informações veja o vídeo que fizemos sobre o Crow.
Na documentação do Crow orienta você usar o Conan ou vcpkg, mas esses gerenciadores de pacotes para C e C++ não são nada amigáveis, então…
Nesse artigo vamos ver como instalar e rodar o Crow no Windows do zero e FUNCIONANDO!
Antes de mais nada você vai precisar ter instalado no seu sistema os seguintes utiltários.
Clique nos links para um tutorial de instalação no Windows.
Usando o WinGet se resume em instalar via PowerShell com os comandos:
winget install --id Git.Git -e --source winget
winget install --id=Kitware.CMake -e
winget install --id=MartinStorsjo.LLVM-MinGW.UCRT -e
winget install -e --id Python.Python.3.11 --scope machine
Só o GCC que você precisará seguir o tutorial.
Detalhe é que após instalá-lo, existe um CMake dentro da pasta
MinGW
, então para haver compatibilidade de versão renomei ocmake
para outro nome.
Exemplo: Se você rodar o comando: Get-Command cmake
no terminal aparecerá esse caminho:
Get-Command cmake
CommandType Name Version Source
----------- ---- ------- ------
Application cmake.exe 4.0.1.0 C:\mingw64\bin\cmake.exe
Então, vc precisa renomear para outro nome, para que ele execute o cmake
da outra instalação(a da Kitware), renomei assim, por exemplo:
Rename-Item -Path "C:\mingw64\bin\cmake.exe" -NewName "DISABLED-cmake.exe"
Quando vc rodar de novo o comando: Get-Command cmake
agora aparecerá outro caminho: C:\Program Files\CMake\bin\cmake.exe
e versão também:
Get-Command cmake
CommandType Name Version Source
----------- ---- ------- ------
Application cmake.exe 3.26.0.0 C:\Program Files\CMake\bin\cmake.exe
Feito isso, agora vamos instalar o Crow C++!
Antes de mais nada crie uma pasta para seu projeto Crow, exemplo no Desktop
e entre na pasta do seu projeto:
cd "$env:USERPROFILE\Desktop"
New-Item -ItemType Directory "MyProjectCrow"
Set-Location "MyProjectCrow"
O Crow depende da biblioteca ASIO em tempo de compilação e em tempo de execução, então, faça o download da ASIO nesse link:
Clique na opção Download como na imagem:
A versão atual(de acordo com a postagem desse artigo é
1.30.0
, mas se houver uma mais recente, escolha-a)
Você será redicionado para o https://sourceforge.net/projects/asio/files/asio/1.30.2.
No SourceForge faça o download da versão asio-1.30.2.zip.
Após finalizado descompacte em: Extrair aqui
ele criará uma pasta descompactada de nome: asio-1.30.2
, renomei ela para asio
somente.
Recorte essa pasta descompactada que você renomeou para asio/
e cole dentro do seu projeto.
Agora, dentro da sua pasta MyProCrow
, clone o repositório do Crow
git clone https://github.com/CrowCpp/Crow
Mova a asio
que está no seu projeto/pasta MyProCrow
para dentro da pasta Crow
que você clonou:
Move-Item -Path "asio" -Destination "Crow"
E entre na pasta do Crow
:
cd Crow
Eu organizo todos meus include em uma pasta na unidade C:\
, assim como no Unix fica em /usr/include
no Windows em guardo tudo(SFML3, SFML2, tmxlite, FFmpeg,…) em C:\Includes
.
Enão crie essa pasta e juntamente com a subpasta C:\Includes\crow
com esse comando, pois é nesse caminho que vamos instalar o Crow e a ASIO:
New-Item -Path "C:/Includes/crow" -ItemType Directory
Agora, ainda dentro da pasta Crow
no seu projeto compile com esse comando:
Termina com um ponto(
.
) no final, esse ponto no final é importante também copiá-lo!
cmake -G "Unix Makefiles" -B build -DCMAKE_INSTALL_PREFIX="C:/Includes/crow" -DASIO_INCLUDE_DIR="./asio" -DCMAKE_CXX_FLAGS="-I./asio" -DCROW_BUILD_EXAMPLES=OFF -DCROW_BUILD_TESTS=OFF .
A saída será mais ou menos essa:
-- The CXX compiler identification is GNU 15.1.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/mingw64/bin/c++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- No build type selected, default to Release
-- Found Python3: C:/Program Files/Python311/python.exe (found version "3.11.9") found components: Interpreter
-- Found asio: C:/Users/USERNAME/Desktop/MyProjectCrow/Crow/asio
-- Configuring done (13.6s)
-- Generating done (0.0s)
-- Build files have been written to: C:/Users/USERNAME/Desktop/MyProjectCrow/Crow/build
Esse --build
é quase insignificante, pois não gera arquivos, mas rode como garantia:
cmake --build build
Agora é só instalar:
cmake --install build
-- Install configuration: "Release"
-- Installing: C:/Includes/crow/include
-- Installing: C:/Includes/crow/include/crow
-- Installing: C:/Includes/crow/include/crow/app.h
-- Installing: C:/Includes/crow/include/crow/ci_map.h
-- Installing: C:/Includes/crow/include/crow/common.h
-- Installing: C:/Includes/crow/include/crow/compression.h
-- Installing: C:/Includes/crow/include/crow/exceptions.h
-- Installing: C:/Includes/crow/include/crow/http_connection.h
-- Installing: C:/Includes/crow/include/crow/http_parser_merged.h
-- Installing: C:/Includes/crow/include/crow/http_request.h
-- Installing: C:/Includes/crow/include/crow/http_response.h
-- Installing: C:/Includes/crow/include/crow/http_server.h
-- Installing: C:/Includes/crow/include/crow/json.h
-- Installing: C:/Includes/crow/include/crow/logging.h
-- Installing: C:/Includes/crow/include/crow/middleware.h
-- Installing: C:/Includes/crow/include/crow/middlewares
-- Installing: C:/Includes/crow/include/crow/middlewares/cookie_parser.h
-- Installing: C:/Includes/crow/include/crow/middlewares/cors.h
-- Installing: C:/Includes/crow/include/crow/middlewares/session.h
-- Installing: C:/Includes/crow/include/crow/middlewares/utf-8.h
-- Installing: C:/Includes/crow/include/crow/middleware_context.h
-- Installing: C:/Includes/crow/include/crow/mime_types.h
-- Installing: C:/Includes/crow/include/crow/multipart.h
-- Installing: C:/Includes/crow/include/crow/multipart_view.h
-- Installing: C:/Includes/crow/include/crow/mustache.h
-- Installing: C:/Includes/crow/include/crow/parser.h
-- Installing: C:/Includes/crow/include/crow/query_string.h
-- Installing: C:/Includes/crow/include/crow/returnable.h
-- Installing: C:/Includes/crow/include/crow/routing.h
-- Installing: C:/Includes/crow/include/crow/settings.h
-- Installing: C:/Includes/crow/include/crow/socket_acceptors.h
-- Installing: C:/Includes/crow/include/crow/socket_adaptors.h
-- Installing: C:/Includes/crow/include/crow/task_timer.h
-- Installing: C:/Includes/crow/include/crow/TinySHA1.hpp
-- Installing: C:/Includes/crow/include/crow/utility.h
-- Installing: C:/Includes/crow/include/crow/version.h
-- Installing: C:/Includes/crow/include/crow/websocket.h
-- Installing: C:/Includes/crow/include/crow.h
-- Installing: C:/Includes/crow/lib/cmake/Crow/CrowTargets.cmake
-- Installing: C:/Includes/crow/lib/cmake/Crow/Findasio.cmake
-- Installing: C:/Includes/crow/lib/cmake/Crow/CrowConfig.cmake
É necessário também mover a pasta asio/
que está dentro de Crow/
para lá também:
Move-Item -Path "asio" -Destination "C:\Includes\"
Para finalizar, basta sair de Crow e remover a pasta clonada:
cd ..
Remove-Item -Path "Crow" -Recurse -Force
Pronto! Agora vamos testar nosso projeto!
Hello, World!
no servidor com CrowAgora sua pasta/projeto MyProjectCrow
está vazia. Vamos criar um arquivo main.cpp
dentro dela, exemplo com VSCode:
code main.cpp
E cole isso dentro:
#include "crow.h"
int main(){
crow::SimpleApp app;
CROW_ROUTE(app, "/")([](){
return "Hello world";
});
app.port(18080).multithreaded().run();
}
Salve o arquivo e volte para o terminal e compile seu projeto com esse comando:
Confirme esses caminhos porque pode ser que você tenhas subpastas. Logo dentro de
asio
tem que tem umainclude
:C:/Includes/asio/include
.
g++ main.cpp -I"C:/Includes/asio/include" -I"C:/Includes/crow/include" -lws2_32 -lmswsock -o app.exe
Vai gerar o arquivo: .\app.exe
, execute-o:
Vai aparecer isso:
.\app.exe
(2025-06-20 03:58:29) [INFO ] Crow/master server is running at http://0.0.0.0:18080 using 2 threads
(2025-06-20 03:58:29) [INFO ] Call `app.loglevel(crow::LogLevel::Warning)` to hide Info level logs.
Ele manda você acessar no seu navegador o endereço: http://0.0.0.0:18080, mas isso pode falhar, ACESSE NA VERDADE:
O endereço
0.0.0.0
é um placeholder que significa “todas as interfaces de rede” — ou seja, o servidor está ouvindo em todas as interfaces do seu computador, mas não é um IP válido para acessar diretamente pelo navegador.
Vai aparecer essa mensagem no navegador:
Para finalizar a conexão pressione
Ctrl + C
no terminal.
Então, está tudo certo!
Eu venho fazendo muitas coisas com Crow, uma delas é esse Tasks++/ToDO++
com Crow C++, Banco de Dados, HTMX e TailwindCSS:
windows desenvolvimentoweb cpp web crowcpp