Estoy trabajando en un proyecto C ++ de código abierto, para código que se compila en Linux y Windows. Utilizo CMake para compilar el código en Linux. Para facilitar la configuración del desarrollo y razones políticas, debo ceñirme a los archivos / editor de proyectos de Visual Studio en Windows (no puedo cambiar a Code :: Blocks , por ejemplo). Veo instrucciones para generar archivos de Visual Studio usando CMake, como aquí .
¿Ha utilizado CMake para generar archivos de Visual Studio antes? ¿Cómo ha sido tu experiencia? Supongamos que quiero agregar un nuevo archivo a mi proyecto. ¿Cuál es el flujo de trabajo para esto?
Respuestas:
CMake es bastante bueno para esto. La parte clave fue que todos en el lado de Windows deben recordar ejecutar CMake antes de cargar la solución, y todos en nuestro lado de Mac tendrían que recordar ejecutarlo antes de hacer.
La parte más difícil fue como desarrollador de Windows asegurarse de que sus cambios estructurales estuvieran en el archivo cmakelist.txt y no en los archivos de la solución o del proyecto, ya que esos cambios probablemente se perderían e incluso si no se perderían no se transferirían al lado de Mac que también los necesitaba, y los chicos de Mac tendrían que recordar no modificar el archivo make por las mismas razones.
Solo requiere un poco de reflexión y paciencia, pero al principio habrá errores. Pero si está utilizando la integración continua en ambos lados, estos se eliminarán temprano y la gente eventualmente adquirirá el hábito.
fuente
C:\...> MSBuild ALL_BUILD.vcxproj
cmake --build .
.cmake --build . --config Debug -- /nologo /verbosity:minimal /m
. Insertaré después.
target run_tests
para ejecutar mi prueba unitaria de googletest, y "Depurar" se puede reemplazar por "Liberar". (Agregar la opción de configuración para Debug es opcional, ya que es la predeterminada, pero laNo estoy seguro si está directamente relacionado con la pregunta, pero estaba buscando una respuesta sobre cómo generar * .sln a partir de proyectos de cmake. Descubrí que se puede usar algo como esto:
El ejemplo genera los archivos VS 2010 necesarios a partir de un archivo CMakeLists.txt de entrada
fuente
cmake
.Trasladamos la cadena de construcción de nuestro departamento a CMake, y tuvimos algunos obstáculos internos ya que otros departamentos usaban nuestros archivos de proyecto y estaban acostumbrados a importarlos a sus soluciones. También tuvimos algunas quejas acerca de que CMake no estaba completamente integrado en el administrador de proyectos / soluciones de Visual Studio, por lo que los archivos debían agregarse manualmente a CMakeLists.txt; esta fue una ruptura importante en el flujo de trabajo al que la gente estaba acostumbrada.
Pero, en general, fue una transición bastante fluida. Estamos muy contentos porque ya no tenemos que lidiar con archivos de proyectos.
El flujo de trabajo concreto para agregar un nuevo archivo a un proyecto es realmente simple:
CMake 2.6 se vuelve a ejecutar automáticamente si algún archivo CMakeLists.txt ha cambiado (y (semi-) automáticamente recarga la solución / proyectos).
Recuerde que si está haciendo compilaciones fuera de la fuente, debe tener cuidado de no crear el archivo fuente en el directorio de compilación (ya que Visual Studio solo conoce el directorio de compilación).
fuente
Como dice Alex, funciona muy bien. La única parte complicada es recordar realizar cambios en los archivos cmake, en lugar de hacerlo desde Visual Studio. Entonces, en todas las plataformas, el flujo de trabajo es similar a si hubiera usado archivos MAKE viejos y simples.
Pero es bastante fácil trabajar con él, y no he tenido problemas con cmake para generar archivos no válidos ni nada de eso, por lo que no me preocuparía demasiado.
fuente
CMake produce proyectos y soluciones de Visual Studio sin problemas. Incluso puede producir proyectos / soluciones para diferentes versiones de Visual Studio sin realizar ningún cambio en los archivos de CMake.
Agregar y eliminar archivos de origen es solo una cuestión de modificar el
CMakeLists.txt
que tiene la lista de archivos de origen y regenerar los proyectos / soluciones. Incluso hay una función globbing para encontrar todas las fuentes en un directorio (aunque debe usarse con precaución).El siguiente enlace explica muy bien el comportamiento específico de CMake y Visual Studio.
CMake y Visual Studio
fuente
CMake puede generar Visual Studio
.projs
/ realmente agradable.slns
, pero siempre existe el problema con la necesidad de modificar los.cmake
archivos en lugar de.proj
/.sln
. Tal como está ahora, lo tratamos de la siguiente manera:/src
y los archivos visibles en Visual Studio son solo "enlaces" a ellos definidos en.filter
./src
directorio , no en el del proyecto predeterminado..cmake
archivos respectivos .Al principio teníamos un poco de miedo de cómo resultaría, pero el flujo de trabajo funciona muy bien y con una buena diferencia visible antes de cada confirmación, todos pueden ver fácilmente si sus cambios se asignaron correctamente en los
.cmake
archivos.Una cosa más importante que debe conocer es la falta de soporte ( afaik ) para "Configuraciones de soluciones" en CMake. Tal como está, debe generar dos directorios con proyectos / soluciones, uno para cada tipo de compilación (depuración, lanzamiento, etc.). No hay soporte directo para funciones más sofisticadas; en otras palabras: cambiar entre configuraciones no le dará lo que podría esperar.
fuente
Aquí hay muchas respuestas excelentes, pero pueden ser reemplazadas por esta compatibilidad con CMake en Visual Studio (5 de octubre de 2016)
fuente
Comencé mi propio proyecto, llamado syncProj. Enlaces de documentación / descarga desde aquí:
https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/
Si planea utilizar Visual Studio para el desarrollo y actualmente solo se admite C ++.
La principal ventaja en comparación con otros sistemas de creación es que realmente puede depurar su script, ya que está basado en C #.
Si no está familiarizado con syncProj, puede convertir su solución / proyecto a un script .cs y continuar con el desarrollo a partir de ese momento.
En cmake deberás escribir todo desde cero.
fuente