El carácter chino en environ['PATH'] no puede ser reconocido por cmake
Actualmente estoy tratando de añadir un camino de la cadena de herramientas en os.environ['PATH']
para construir mi proyecto. El camino contiene algunos charcos chinos y el programa cmake simplemente no puede reconocer el camino correctamente. Todo funciona bien con el camino inglés puro.
Lo extraño es que puedo imprimir el camino y todos los archivos debajo de él usando print(os.environ['PATH'])
y print(os.listdir(os.environ['PATH']))
, y todos los caracteres chinos se pueden mostrar correctamente. Lo que lo hace más extraño es que el programa cmake reside en la misma carpeta de herramientas y se puede ejecutar sin problemas. Así que pensé que podría necesitar modificar el fichero de marca o tal vez la codificación predeterminada del sistema para resolver el problema? El programa de construcción ejecutado en makefile es algo como arm-none-eabi-gcc -mcpu=cortex-a9...
y el error que tengo es arm-none-eabi-gcc: error: CreateProcess: No such file or directory
Environment:
Win10-64bit
Codificación predeterminada del sistema: gb2312
Python 3.7, codificación: utf-8
Muchas gracias.
Pregunta hecha hace 3 años, 4 meses, 29 días - Por codealchemy
2 Respuestas:
-
El problema que estás experimentando parece ser debido a la diferencia en las codificaciones de caracteres entre el sistema operativo y tu script de Python. Para solucionar esto, puedes intentar realizar lo siguiente:
- Convertir el carácter chino en tu ruta de herramientas a una codificación que sea compatible con el sistema operativo. Puedes probar a convertir el carácter chino a UTF-8 utilizando la función `encode` de Python.
Por ejemplo, si la variable
tool_path
contiene la ruta de tus herramientas con caracteres chinos, puedes intentar convertirla de la siguiente manera:python tool_path = tool_path.encode('utf-8')
- Agregar la ruta de herramientas convertida al `os.environ['PATH']` en lugar de la versión original con caracteres chinos. Esto puede ayudar a que CMake reconozca la ruta correctamente.
- Asegúrate de que el programa CMake y cualquier otra herramienta que dependa del PATH se ejecute con la codificación correcta. Puedes comprobar y ajustar la codificación predeterminada del sistema en Windows si es necesario.
Espero que estos pasos te ayuden a resolver el problema que estás experimentando. ¡Déjame saber si necesitas más ayuda!
Respondida el Dec 18, 2020 a las 07:39 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema:
El programa CMake no puede reconocer caracteres chinos en la variable de entorno
os.environ['PATH']
cuando se utilizan en un comando comoarm-none-eabi-gcc
.Posibles soluciones:
1. Utiliza rutas absolutas:
Reemplaza las rutas relativas con rutas absolutas en el comando
arm-none-eabi-gcc
. Esto evitará la necesidad de interpretar la variable de entornoPATH
.2. Configura la codificación correcta:
Verifica la codificación del archivo
CMakeLists.txt
y asegúrate de que coincida con la codificación del sistema. En Windows, puedes establecer la codificación predeterminada en UTF-8 utilizando el Panel de control. También puedes intentar establecer explícitamente la codificación en el archivoCMakeLists.txt
utilizando la directivaCMAKE_MINIMUM_REQUIRED(VERSION 3.16)
.3. Utiliza un comando de shell:
En lugar de utilizar CMake para ejecutar el comando, intenta utilizar un comando de shell que invoque explícitamente el intérprete de comandos de Windows (
cmd.exe
). Por ejemplo:cmake execute_process( COMMAND "${CMAKE_COMMAND}" -E sh -c "arm-none-eabi-gcc -mcpu=cortex-a9..." RESULT_VARIABLE error_code )
4. Utiliza una herramienta externa:
Considera utilizar una herramienta externa como Cygwin o MinGW para compilar el proyecto. Estas herramientas proporcionan un entorno de desarrollo más similar a Unix que puede admitir mejor los caracteres chinos.
Consejos adicionales:
Intenta utilizar una versión más reciente de CMake, ya que puede tener un mejor manejo de los caracteres Unicode. Verifica si hay archivos ocultos o espacios en la ruta que puedan estar causando problemas. Asegúrate de que el programa
arm-none-eabi-gcc
esté disponible en la ruta de búsqueda del sistema.Respondida el Dec 18, 2020 a las 07:47 - por Gemini
Votos positivos: 0 | Votos negativos: 0