2008-12-27 14 views
79

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 de 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.Usando CMake para generar archivos de proyecto de Visual Studio C++

¿Alguna vez ha utilizado CMake para generar archivos de Visual Studio? ¿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?

Respuesta

52

CMake es realmente 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 los archivos de solución o proyecto ya que esos cambios probablemente se perderían e incluso si no se perdieran no se transferirían a el 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 usa continuous integration en ambos lados, estos se agitarán temprano y las personas eventualmente se acostumbrarán.

+9

Si esto era cierto una vez, no es por más tiempo. Cualquier cambio en CMakeLists.txt causará una regeneración del sistema de compilación (archivos de proyecto para visual studio, makefiles, etc.). El flujo de trabajo dentro de Visual Studio es un poco molesto ya que Visual Studio no regenera los archivos del proyecto cuando detecta que las cosas han cambiado, sino que espera a que haga una compilación que hace que aparezca un diálogo ya que -carga el archivo del proyecto – Vitali

+0

La advertencia de esto es que no tiene que ejecutar el compilador de Visual Studio a través del IDE. Puede ejecutarlo en la línea de comando: 'C: \ ...> MSBuild ALL_BUILD.vcxproj' – PfunnyGuy

10

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 de trabajar, y no he tenido problemas con cmake generando archivos no válidos o algo así, así que no me preocuparía demasiado.

26

Movimos la cadena de construcción de nuestro departamento a CMake, y tuvimos algunos obstáculos internos desde otros departamentos donde utilizamos 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 añadir un nuevo archivo a un proyecto es muy simple:

  1. crear el archivo, asegúrese de que está en el lugar correcto.
  2. Agregue el archivo a CMakeLists.txt.
  3. Compilación.

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

6

CMake puede generar muy agradable Visual Studio .projs/.slns, pero siempre existe el problema de la necesidad de modificar los archivos .cmake en lugar de .proj/.sln. Como está ahora, se trata de la siguiente manera:

  1. Todos los archivos de origen van a /src y archivos visibles en Visual Studio son sólo "enlaces" a ellos definidos en .filter.
  2. El programador agrega/elimina archivos recordando trabajar en el directorio /src definido, no en el del proyecto predeterminado.
  3. Cuando termina, ejecuta un script que "actualiza" los respectivos archivos .cmake.
  4. Comprueba si el código se puede construir en el entorno recreado.
  5. Confirma el código.

Al principio estábamos un poco de miedo de cómo va a salir, pero el flujo de trabajo funciona muy bien y con buen diff visibles antes de cada confirmación, todo el mundo puede ver fácilmente si sus cambios fueron asignados correctamente en .cmake archivos.

Una cosa más importante que debe saber es la falta de soporte (afaik) para "Configuraciones de solución" en CMake. Tal como está, 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.

+3

A partir de CMake 2.8.10, las soluciones generadas tienen las 4 configuraciones de compilación habituales, y admite definir otras personalizadas. – John

+0

@John ¡Gracias, es bueno saber! –

36

No está seguro de si está directamente relacionada con la pregunta, pero yo estaba buscando una respuesta para cómo generar .sln * desde cmake proyectos que he descubierto que uno puede usar algo como esto:

cmake -G "Visual Studio 10" 

El ejemplo genera archivos VS 2010 necesarios a partir de un archivo de entrada CMakeLists.txt

+0

En https://stackoverflow.com/questions/11269833/cmake-selecting-a-generator-within-cmakelists-txt @Ivan señala que esto se puede poner en un archivo PreLoad.cmake en la misma carpeta que su superior- nivel CMakeLists.txt y luego puedes hacer 'cmake'. – PfunnyGuy

5

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 and Visual Studio

0

he comenzado mi propio proyecto, denominado syncProj. Documentación/descarga enlaces desde este punto:

https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/

Si usted está planeando utilizar Visual Studio para el desarrollo, y en la actualidad sólo es compatible con C++.

La ventaja principal en comparación con otros sistemas make es que realmente puede depurar su 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 tendrá que escribir todo desde cero.

Cuestiones relacionadas