Llevo 10 años desarrollando aplicaciones de Windows en C ++. Y recientemente comencé a investigar algunos proyectos de Linux, y no puedo soportar lo improductivo que soy ...
Aprendo rápido y llevo algún tiempo usando Linux como plataforma principal. Y me siento muy cómodo con Shell, los principios del sistema operativo y la GUI. Pero cuando se trata de desarrollo, parece que he vuelto a la escuela.
Tan pronto como abro un proyecto más grande, estoy atascado. La mayoría de ellos están basados en archivos MAKE, así que, básicamente, cuando trato de navegarlos con QT o CodeBlocks, en el mejor de los casos, puedo usar Intellisense por archivo. Y la mayoría de las variables de tiempo se escapan del alcance.
Luego hay un tema de ir a la definición, que parece inexistente, intente unirse a un proyecto más grande de sourceforge, y estará atrapado durante días, porque navegar a las definiciones es muy difícil ... grep -r "this_def" . --include "*.cpp" --include "*.h"
parece muy lento y torpe.
Y luego, la depuración, gdb funciona, pero no importa lo que haga, parece que está a años luz de WinDbg o del depurador VisualStudio.
Y estas cosas me están desesperando, quiero escribir código, pero va muy lento ... Estoy empezando a pensar que los desarrolladores de Linux aprenden las definiciones de funciones de memoria y analizan el código a simple vista, pero no puedo creer que sea entonces.
Alguien ha pasado por esto? ¿Hay algo que me falta que pueda hacerme más productivo?
Respuestas:
Curiosamente, periódicamente tengo el mismo problema en la dirección opuesta. Soy principalmente un codificador de UNIX, pero periódicamente tengo que portar cosas a Windows. No puedo decirle la cantidad de veces que he querido arrancarme el pelo porque no puedo encontrar la casilla de verificación adecuada para una opción de compilador oculta en una de las 35 páginas de configuración de preferencias para un proyecto. Prefiero simplemente abrir el archivo de proyecto y agregar el XML yo mismo.
Moviéndose en cualquier dirección, el secreto es tener paciencia y aprender el conjunto de herramientas para la plataforma en la que está tratando de trabajar. Por supuesto que se sentirá frustrado, es nuevo y no es familiar, y se le reduce al estado de novato todo de nuevo. No hay forma de evitar esto.
En su caso particular, hay algunas herramientas adicionales que debe conocer. El primero es DDD , una interfaz gráfica de usuario para gdb. No es tan hábil como Visual Studio, pero tomará tu mano. Sin embargo, realmente recomendaría morder la viñeta y comenzar a aprender los entresijos de gdb. En verdad, si usted es un usuario habitual, no hay mucha diferencia entre memorizar qué comandos escribir y memorizar qué cuadro de diálogo debe abrir para cambiar una configuración.
También necesita saber sobre herramientas como CScope y CTags . Por mucho que te resistas, te sugiero que aprendas VIM o EMACS . Se integran bien con las herramientas de etiquetas que acabo de mencionar. Cuando fueres haz lo que vieres. Puede encontrar extensiones para VIM y EMACS que completarán el código por usted. Mi propia experiencia con herramientas que ofrecen la finalización del código es que sí, ahorra algo de escritura, pero en general es fácil. Pensar es lo que es difícil. Su opinión puede diferir, especialmente si tiene síndrome del túnel carpiano.
En cuanto a hacer. Make es ciertamente horrible, pero probablemente solo tendrás que aguantar y aprenderlo.
fuente
Desarrollar en Windows, implementar en Linux.
Esto incluye ejecutar pruebas unitarias tanto en su propia máquina (Windows) como en el servidor de compilación (Linux).
Como efecto secundario, aprenderá a escribir código portátil.
Otro efecto positivo es que el uso de diferentes compiladores generará más advertencias y, por lo tanto, detectará más errores.
ACTUALIZACIÓN : Para todos los fanáticos de Linux que voten por esta respuesta: ¡No digo que todos deberían desarrollar en Windows! Pero usar la plataforma que conoces muy bien es más productivo que pasar mucho tiempo aprendiendo una nueva plataforma.
fuente
Su problema se ha resuelto muchas veces en el mundo Linux, sin embargo, a diferencia de las herramientas de Windows / Microsoft, no se entregará en una bandeja de plata con una guarnición de extras. Es posible que deba hacer un trabajo para obtenerlo.
Utilizo un editor comercial (Visual Slick Edit, que es considerado costoso por aquellos que no valoran tanto su tiempo como yo) para este problema exacto. Eclipse con el complemento CDT es un camino de código abierto que tiene muchos seguidores justificables. (No es bueno para mí, ya que a menudo necesito soporte ADA)
Lo que no hago es tratar de aplicar ingeniería inversa a los archivos MAKE en algún tipo de proyecto. Uso los sistemas integrados del IDE y agrego / elimino archivos manualmente según sea necesario. Estoy seguro de que podría escribirlo, pero el tiempo probablemente no valga la pena. Para esto, encontré que el eclipse es un poco menos utilizable que Slickedit (eso podría fácilmente (y probablemente ha cambiado) desde la última vez que lo vi)
Linux tiene una amplia gama de herramientas, los tipos que saben vi me superan en todos los aspectos de la edición, tiene búsquedas de referencias, etc., solo una curva de aprendizaje empinada. Estoy seguro de que Emacs también puede hacerlo todo, aunque nunca lo haya usado.
fuente
Por lo que vale, en Linux tiene mejores sistemas de construcción que la antigua versión GNU (que a menudo va con el horrible autoconf ), por ejemplo omake y muchos otros (
cmake
,scons
...).fuente
Una sugerencia con respecto a lo tedioso que es usar grep para buscar código: configure los alias bash en su archivo .bashrc. Entonces, es solo un comando:
Probablemente haya mejores formas de escribir el comando, pero la idea es la misma. ¿Quieres buscar el código? escribe un alias llamado searchCode. Recuerde que aunque son tediosas y complicadas, las herramientas de Unix también se pueden usar para facilitarle la vida.
fuente
Mi 2c como alguien que ha desarrollado C ++ en ambas plataformas y le gustan los dos.
1) Los Makefiles son dolorosos: el mejor consejo que puedo darle es intentar cambiar a otro sistema de compilación, si es posible.
2) Para la edición y exploración de código, hay algunas herramientas bastante útiles. Claro, no están integrados, pero en realidad no importa cuando se trata de hacer las cosas. vim + ctags + grep te llevará allí. Por supuesto, también hay IDEs, pero, francamente, no me gustó nada de lo que probé: Eclipse + CDT, KDevelop, Code :: Block. Sin embargo, puede llegar a una conclusión diferente.
3) Para la depuración, simplemente manténgase en la línea de comandos gdb. Claro, está bastante por detrás de Windbg cuando se trata de características, pero para la mayoría de los propósitos está bien. Los front-end gráficos (ddd, KDbg) eran bastante defectuosos la última vez que los probé, pero nuevamente las cosas pueden haber cambiado :)
La conclusión es: sí, debe poner un poco de esfuerzo de aprendizaje, pero después de eso será tan productivo como lo es en Windows.
fuente
gdb
desde adentroemacs
(en Linux) y me ayuda mucho.Para el resto de los buenos consejos que ya recibió, me gustaría agregar un par de enlaces, respectivamente, a ack y pss .
Están dirigidos a programadores que tienen que preocuparse específicamente por el código fuente, tratando de mejorar sobre grep.
fuente
Grandes respuestas Agregando a ellos,
Cuando hice este movimiento, el error que cometí fue tratar de saltar al código sin darle la debida diligencia al sistema de compilación GNU, que volvió a morderme cuando quería hacer cambios en el código. Pase el par de días necesarios para comprender cómo funcionan AutoMake / AutoConf / Make suite of tools, será muy rápido después de eso.
En cuanto a las herramientas: Eclipse + CDT / GDB + DDD realmente hace mucho.
fuente
Aquí hay algunos consejos para que funcione más fácilmente:
fuente