visual tutorial studio que gui c++ visual-studio build-process cross-platform cmake

tutorial - Usar CMake para generar archivos de proyecto de Visual Studio C++



cmake windows tutorial (8)

Estoy trabajando en un proyecto C ++ de código abierto, para código que se compila en Linux y Windows. Yo uso CMake para construir el código en Linux. Para facilitar la configuración del desarrollo y razones políticas, debo apegarme 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 here .

¿Ha usado 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?


CMake es bastante bueno para esto. La parte clave era que todos en el lado de Windows tenían que recordar ejecutar CMake antes de cargar la solución, y todos en nuestro lado de Mac tendrían que acordarse de ejecutar antes de make.

La parte más difícil fue como desarrollador de Windows asegurándose de que sus cambios estructurales estuvieran en el archivo cmakelist.txt y no en la solución o los archivos del proyecto, ya que esos cambios probablemente se perderían e incluso si no se perdieran, no se transferirían al lado de Mac que también los necesitaba, y los chicos Mac deberían 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 usa una integración continua en ambos lados, estos se verán sacudidos temprano, y la gente eventualmente adquirirá el hábito.


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 CMake.

Agregar y eliminar archivos fuente es solo una cuestión de modificar el CMakeLists.txt que tiene la lista de archivos fuente 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


CMake puede generar Visual Studio .projs / .slns realmente agradable, pero siempre existe el problema con la necesidad de modificar los archivos .cmake lugar de .proj / .sln . Como es ahora, estamos lidiando con esto de la siguiente manera:

  1. Todos los archivos fuente van a /src y los archivos visibles en Visual Studio son solo "enlaces" a ellos definidos en .filter .
  2. El programador agrega / elimina archivos que recuerdan trabajar en el directorio /src definido, no en el del proyecto predeterminado.
  3. Cuando .cmake , ejecuta un script que "actualiza" los respectivos archivos .cmake .
  4. Él verifica si el código se puede construir en el entorno recreado.
  5. Él comete el código.

Al principio teníamos un poco de miedo de cómo resultaría, pero el flujo de trabajo funciona muy bien y con una agradable diferencia visible antes de cada confirmación, todos pueden ver fácilmente si sus cambios se mapearon correctamente en archivos .cmake .

Una cosa más importante que debe saber es la falta de soporte ( afaik ) para "Configuraciones de solución" en CMake. Tal como están las cosas, debe generar dos directorios con proyectos / soluciones, uno para cada tipo de compilación (depuración, versión, etc.). No hay soporte directo para funciones más sofisticadas, en otras palabras: cambiar entre configuraciones no le dará lo que podría esperar.


Como dice Alex, funciona muy bien. La única parte difícil es recordar realizar cualquier cambio en los archivos cmake, en lugar de hacerlo desde Visual Studio. Entonces, en todas las plataformas, el flujo de trabajo es similar a si hubieras usado makefiles antiguos.

Pero es bastante fácil trabajar con él, y no he tenido problemas con cmake generando archivos no válidos ni nada de eso, así que no me preocuparía demasiado.


Empecé 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 usar Visual Studio para desarrollo, y actualmente solo es compatible con C ++.

La principal ventaja en comparación con otros sistemas make es que puedes depurar tu script, ya que está basado en C #.

Si no está familiarizado con syncProj, puede simplemente convertir su solución / proyecto a la secuencia de comandos .cs y continuar el desarrollo a partir de ese momento.

En cmake necesitarás escribir todo desde cero.


Movimos la cadena de construcción de nuestro departamento a CMake, y tuvimos algunos obstáculos internos desde otros departamentos donde usamos nuestros archivos de proyectos y estábamos acostumbrados a importarlos en 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 se tenían que agregar manualmente a CMakeLists.txt; esta fue una ruptura importante en el flujo de trabajo a la que la gente estaba acostumbrada.

Pero en general, fue una transición bastante suave. Estamos muy contentos ya que 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:

  1. Crea el archivo, asegúrate de que esté en el lugar correcto.
  2. Agregue el archivo a CMakeLists.txt.
  3. Construir.

CMake 2.6 se vuelve a ejecutar automáticamente si los archivos CMakeLists.txt han cambiado (y (semi) automáticamente vuelve a cargar la solución / proyectos).

Recuerde que si realiza 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).



No estoy seguro de si está directamente relacionado con la pregunta, pero estaba buscando una respuesta sobre cómo generar * .sln a partir de proyectos de cmake. He descubierto que uno puede usar algo como esto:

cmake -G "Visual Studio 10"

El ejemplo genera los archivos necesarios de VS 2010 desde un archivo de entrada CMakeLists.txt