Estoy portando una aplicación escrita en C++ desde Windows a Linux. Tengo un problema con la ruta de los archivos de encabezado. Windows usa \
y Linux usa /
. Me resulta engorroso cambiar esto en todos y cada uno de los archivos fuente y encabezado. ¿Hay algo de trabajo?Incluir cambio de ruta de encabezado de Windows a Linux
Respuesta
Utilice siempre barras diagonales en las rutas #include. El trabajo del compilador consiste en asignar la ruta al esquema de directorio/barra que soporte el sistema operativo subyacente.
-1. En mi humilde opinión, estás respondiendo la pregunta incorrecta: el tipo ya tiene una pila de archivos con rutas #include inclinadas hacia atrás. Necesita una ambulancia, no alguien que le diga que no debería haber conducido tan rápido. –
¡Buena pregunta! Supongo que quiso decir que quiere evitar tener que cambiar continuamente entre/y \ mientras se mueve entre los proyectos. (OP podría aclarar por favor?) Bajé mi -1 ya que obviamente la opinión del OP de lo que el OP quiere supera a la mía :) –
@j_random_hacker Están portando (al menos, él estaba cuando se escribió la pregunta) por lo que todavía están conducir y aún no se estrellan. Voltear la dirección de barras en sus archivos es una sola declaración de perl. –
¿Qué versión de Windows está utilizando? Hasta donde yo sé, comenzando con Windows XP, las barras diagonales realmente funcionan como delimitadores de ruta.
Creo que el OP va de Windows a Linux, no de Linux a Windows –
en realidad la aplicación está codificada para diferentes plataformas. Y estoy usando los archivos codificados por otra persona. Estoy interesado en saber si existe una manera más fácil de cambiar las barras diagonales inversas a barras diagonales u obtener un efecto similar. –
Utilice siempre barras diagonales en las directivas #include. Algunos sistemas operativos/compiladores lo requieren, y Windows/Visual Studio es lo suficientemente inteligente como para manejarlo correctamente.
Desde que empiezas con el código de Windows, asumo que tienes Visual Studio. Use el cuadro de diálogo Buscar y reemplazar y cree una expresión regular que hará la sustitución por usted. Ejecute el buscar y reemplazar en todos los archivos.
Por ejemplo, usar algo como esto:
#include:b+<{[^\\\>]}\\
para su búsqueda expresión y
#include <\1
para la expresión de reemplazo (advertencia: no probado). Ejecute esto en todos los archivos hasta que no se realicen reemplazos. Luego cambie los corchetes en ángulo a comillas y repita.
Las API de Windows tienen siempre soportaron barra diagonal como separador de directorio. Y eso se debe a que, al menos desde atrás, al menos DOS 3.1 también fue compatible. El problema siempre ha sido COMMAND.COM y CMD.EXE. Usan barra inclinada como indicador de opción (en lugar de guión como se encuentra en Unix). Nunca utilice barras diagonales inversas para separadores de directorios en idiomas en los que se utiliza una barra invertida en una cadena para escapar de caracteres especiales.
Si no tiene un shell Unix, ¿no tiene un editor que busca/reemplaza en varios archivos? Diablos, escribe un pequeño programa para hacerlo si es necesario. El análisis del código fuente de C++ para sus declaraciones #include no puede ser difícil.
No siempre ha soportado la barra diagonal que fue un gran problema para las edades. Pero ahora sí. –
Al menos de regreso a DOS 4.0 lo hizo. – jmucchiello
joe: definitivamente no es cierto. Los compiladores pueden haberlo admitido para incluir, y la interfaz de usuario de Explorer ciertamente lo hizo. Pero WinAPI en general no lo hizo. –
¡Usted gente! Sí, puede y siempre debe usar barras diagonales. Creo que el problema es cómo obtener allí de aquí!
Si ha instalado Perl, el siguiente revestimiento será convertir un archivo fuente en C++ para utilizar barras inclinadas, de guardar la versión original en un archivo con extensión .bak
:
perl -i.bak -pe "tr!\\!/! if /^\s*#\s*include\b/" myfile.cpp
(La línea de comandos anterior es para Windows: si está utilizando Linux u otro shell tipo Unix, use comillas simples alrededor del tercer parámetro en lugar de comillas dobles.)
Si usted tiene un montón de archivos que necesita para convertir, por ejemplo todos los archivos que terminan en .cpp
:
for %f in (*.cpp) do perl -i.bak -pe "tr!\\!/! if /^\s*#\s*include\b/" %f
El comando correspondiente para un entorno de shell Bourne (shell Linux típico):
for f in *.cpp; do perl -i.bak -pe 'tr!\\!/! if /^\s*#\s*include\b/' $f; done
Si no tiene Perl instalado, debería poder encontrar un editor de texto que permita buscar y reemplazar archivos.
Es posible que desee utilizar un separador diferente que! si está usando tcsh. –
@mrree: Buen punto. También necesitará cambiar algo la sintaxis del bucle for (Olvidé la sintaxis exacta por desgracia). –
foreach f (* .cpp) .... end; No creo que puedas hacerlo todo en una sola línea ... –
Usted puede intentar este comando basado en Perl comando anterior, que haga el trabajo recusrively
find . -type f -name \* | xargs grep '#include' | grep '\\' |awk -F: '{print $1}'|sort| uniq | xargs -n1 perl -i.bak -pe 'tr!\\!/! if /^\s*#\s*include\b/'
- 1. Cómo volver a incluir encabezado en aplicación
- 2. ¿Cómo incluir archivos de encabezado en la ruta de búsqueda de GCC?
- 3. Cambio de ruta de MongoDB?
- 4. Incluir un encabezado en otro archivo de encabezado
- 5. Cómo incluir archivos de encabezado a través del archivo MAKE
- 6. Al incluir archivos de encabezado, ¿es sensible la ruta de acceso?
- 7. Encabezado/Incluir guardias no funcionan?
- 8. C Archivos de encabezado - Forma correcta de incluir
- 9. Boost - compilación cruzada - "de Linux" "a Windows"
- 10. Cmake: directorio de compilación en incluir ruta
- 11. Eclipse C/C++ (CDT) importar archivos en proyecto - archivo de encabezado no encontrado - incluir ruta
- 12. Anular la ruta de búsqueda del encabezado predeterminado
- 13. Linux analógico a Windows GetAsyncKeyState()
- 14. ¿Cuál es el encabezado de Windows más pequeño que puedo #incluir para definir DWORD?
- 15. Costo de incluir archivos de encabezado en Objective-C
- 16. búsqueda de nombre de ruta en Linux?
- 17. Ayuda con la ruta de Windows - PHP
- 18. En un proyecto qt, cómo agregar incluir ruta a pro bajo Windows donde la ruta contiene espacio
- 19. Cambiar a Linux para el desarrollo de Windows, ¿mala idea?
- 20. Establecer incluir la ruta con el valor de variable de entorno
- 21. Bézier Ruta con cambio dinámico de ancho
- 22. Windows equivalente a la llamada de readahead de Linux?
- 23. ruta de archivo Java en Linux
- 24. Incluir subdominio de ruta restringida en Rails asistente de url
- 25. ¿Cómo incluir archivos de encabezado en Visual Studio 2008?
- 26. Operaciones atómicas en CUDA? ¿Qué archivo de encabezado incluir?
- 27. Cómo incluir JavaScript en el encabezado de la página MVC4
- 28. ¿Cómo enseñar a Eclipse a incluir los paquetes fuente de Maven en la ruta de origen?
- 29. Operaciones de cadena de shell de Windows (cambio de barra invertida a barra)
- 30. Cambio de ubicación de Windows, .gitconfig
Cuando finalmente arreglar eso, recuerde: NUNCA uso cada vez barras invertidas. Las barras diagonales funcionan tanto en Windows como en Linux. –