windows system

This commit is contained in:
2026-10-06 13:23:15 +02:00
parent 03d2ece7d6
commit 208a3e9738
12 changed files with 93 additions and 16 deletions
+23
View File
@@ -224,3 +224,26 @@ endif
Más adelante (Fase 4) aquí irán también las librerías que cambian según la
plataforma, como `-lws2_32` para Winsock en Windows.
### La «magia .exe» de MSYS2
Sin `EXE`, el Makefile con objetivo `build/hello` parece funcionar en Windows:
el segundo `make` dice `Nothing to be done`. No es mérito del Makefile:
- `make`, `ls` y la shell de `/usr/bin` son programas de MSYS2, que emula
POSIX encima de Windows.
- Si un programa de MSYS2 pregunta por `build/hello` y solo existe
`build/hello.exe`, la capa de emulación responde que existe y le da la fecha
del `.exe`.
| Comando | Qué ve |
|---|---|
| `ls -l build/hello` | Pasa por la emulación: «existe». |
| `cmd //c dir build` | Pregunta a Windows: solo hay `hello.exe`. |
Con un make nativo (`mingw32-make`) esa emulación no existe: no encuentra
`build/hello` y vuelve a enlazar cada vez. Por eso se pone el nombre real con
`$(EXE)`.
**Comparación con Go:** `go build` añade `.exe` por sí mismo cuando
`GOOS=windows`. En C, el nombre del ejecutable lo decides tú en el Makefile.
+4
View File
@@ -76,6 +76,10 @@ Si juntas dos flags de parada (`-E -S`), gana la que para antes.
| `objdump -p hello.exe \| grep "DLL Name"` | Lista las DLL de las que depende el ejecutable. |
| `strip hello.exe` | Quita símbolos e información de depuración. |
| `gcc -static ...` | Enlaza estáticamente todas las librerías posibles. |
| `uname -s` | Nombre del sistema: `Linux` en Fedora, `UCRT64_NT-...` en la terminal UCRT64 de Windows. |
| `echo $MSYSTEM` | Entorno de MSYS2 activo. Tiene que ser `UCRT64`. |
| `pacman -S mingw-w64-ucrt-x86_64-clang` | Instala clang para el entorno UCRT64. |
| `pacman -S vim` | Instala `xxd` (viene con vim). Sin él, usa `hexdump -C fichero.bin`. |
## Make