
He instalado las utilidades principales de gnuwin32, make y gettext:
http://gnuwin32.sourceforge.net/packages/coreutils.htm
http://gnuwin32.sourceforge.net/packages/make.htm
http://gnuwin32.sourceforge.net/packages/gettext.htm
Tengo un archivo MAKE que se parece a esto:
.PHONY: po mo
po:
xgettext -Lpython --output=po/messages.pot vocelab/app.py vocelab/app.kv
msgmerge --update --no-fuzzy-matching --backup=off po/en.po po/messages.pot
msgmerge --update --no-fuzzy-matching --backup=off po/hu.po po/messages.pot
mo:
mkdir -p "data/locales/en/LC_MESSAGES"
mkdir -p "data/locales/hu/LC_MESSAGES"
msgfmt -c -o data/locales/en/LC_MESSAGES/langapp.mo po/en.po
msgfmt -c -o data/locales/hu/LC_MESSAGES/langapp.mo po/hu.po
El problema es que el comando mkdir es el cmd.exe integrado. Aunque tengo "c:\Program Files (x86)\GnuWin32\bin" en mi ruta, el comando integrado tiene prioridad. Entonces, cuando escribo "make mo", aparece este error:
A subdirectory or file data/locales/en/LC_MESSAGES already exists.
Podría reemplazar mkdir con "c:\Program Files (x86)\GnuWin32\bin\mkdir.exe" en el archivo MAKE, pero eso no parece correcto. En un sistema diferente, alguien podría tener una ubicación diferente para gnuwin32.
En otras palabras: mkdir.exe está ahí, pero entra en conflicto con un comando integrado de cmd.exe. La otra opción sería utilizar un shell diferente en Windows. Pero instalar el subsistema Linux para Windows o instalar cygwin requeriría gigabytes de espacio en disco. Por el contrario, el directorio gnu win32 necesario para este proyecto es de sólo 40 MB.
Encontré una solución que realmente funciona, pero es fea y no portátil:
GNUWIN32=c:/Program Files (x86)/GnuWin32\bin
.PHONY: po mo
po:
"$(GNUWIN32)/xgettext" -Lpython --output=po/messages.pot vocelab/app.py vocelab/app.kv
"$(GNUWIN32)/msgmerge" --update --no-fuzzy-matching --backup=off po/en.po po/messages.pot
"$(GNUWIN32)/msgmerge" --update --no-fuzzy-matching --backup=off po/hu.po po/messages.pot
mo:
"$(GNUWIN32)/mkdir" -p "data/locales/en/LC_MESSAGES"
"$(GNUWIN32)/mkdir" -p "data/locales/hu/LC_MESSAGES"
"$(GNUWIN32)/msgfmt" -c -o data/locales/en/LC_MESSAGES/langapp.mo po/en.po
"$(GNUWIN32)/msgfmt" -c -o data/locales/hu/LC_MESSAGES/langapp.mo po/hu.po
Respuesta1
El CMD ya mkdir
no admite -p
el cambio en sistemas Windows 8+. Es por eso que aparece este error.
Como dije en el comentario, no espere que un archivo MAKE/script se ejecute tanto en Windows como en Linux como lo hace este. Por lo general, necesitarás proporcionar diferentes versiones, una para cada sistema operativo para archivos MAKE más complicados.
Para superar el error con CMD mkdir
(solo para Windows):
if not exist "data/locales/en/LC_MESSAGES" mkdir "data/locales/en/LC_MESSAGES"
o para un comando más corto
en = "data/locales/en/LC_MESSAGES"
hu = "data/locales/hu/LC_MESSAGES"
if not exist $en mkdir $en
if not exist $hu mkdir $hu
Para usar el gnuwinmkdir
Utilice comillas dobles en mkdir
. Esto obligará a Windows a buscar el ejecutable mkdir
en lugar del comando CMD.
"mkdir" -p "data/locales/en/LC_MESSAGES"
Actualizar:Probé la comilla doble en Kali Linux, Linux Mint, Windows 7 y funciona en todos ellos. Solo asegúrate de que gnuwin\bin
estés en la ruta de tu sistema.