tutorial descarga course cmake

descarga - ¿Cómo funciona exactamente CMake?



cmake tutorial (2)

No estoy preguntando esto solo. Espero que esta pregunta sea una referencia para los muchos novatos que me quieran, me pareció completamente desconcertante sobre qué es exactamente lo que estaba sucediendo detrás de las escenas cuando para un archivo CMakeLists.txt tan pequeño CMakeLists.txt

cmake_minimum_required (VERSION 2.6) project(Tutorial) add_executable(Tutorial tutorial.cpp)

y un pequeño tutorial.cpp

int main() { return 0; }

hay tantos archivos generados

CMakeCache.txt cmake_install.cmake Makefile CMakeLists.txt tutorial.cpp

y una carpeta CMakeFiles con tantos archivos y carpetas

CMakeCCompiler.cmake CMakeOutput.log Makefile.cmake cmake.check_cache CMakeSystem.cmake progress.marks CMakeCXXCompiler.cmake CMakeTmp TargetDirectories.txt CMakeDetermineCompilerABI_C.bin CompilerIdC Tutorial.dir CMakeDetermineCompilerABI_CXX.bin CompilerIdCXX CMakeDirectoryInformation.cmake Makefile2

No entender lo que sucedía detrás de la escena (es decir, por qué era necesario generar los archivos y cuál era su propósito), era el mayor obstáculo para poder aprender CMake.

Si alguien sabe, ¿podría explicarlo por la posteridad? ¿Cuál es el propósito de estos archivos y cuándo cmake . ¿Qué es exactamente la configuración y generación de cmake antes de construir el proyecto?


Como se indica en su sitio web:

Cmake es un sistema de compilación de código abierto multiplataforma para gestionar el proceso de compilación del software utilizando un método independiente del compilador

En la mayoría de los casos, se utiliza para generar archivos de proyecto / creación: en su ejemplo, ha creado Makefile que se utiliza para construir su software (principalmente en la plataforma Linux / Unix).

Cmake permite proporcionar archivos de compilación multiplataforma que generarían archivos de proyecto / creación específicos de plataforma para un compilador / plataforma particular.

Por ejemplo, puede intentar compilar su software en Windows con Visual Studio y luego con la sintaxis adecuada en su archivo CMakeLists.txt puede iniciar

cmake .

dentro del directorio de su proyecto en la plataforma Windows y Cmake generará todos los archivos de proyecto / solución necesarios ( .sln etc.).

Si desea construir su software en la plataforma Linux / Unix, simplemente vaya al directorio de origen donde tiene su archivo CMakeLists.txt y active el mismo cmake . y generará todos los archivos necesarios para crear software a través de sipmle make o make all .

Aquí tiene una muy buena presentación sobre las funciones clave de Cmake http://www.elpauer.org/stuff/learning_cmake.pdf

EDITAR

Si desea que la biblioteca dependiente de la plataforma incluya / definiciones de variables, etc., puede usar esta sintaxis en el archivo CMakeLists.txt

IF(WIN32) ...do something... ELSE(WIN32) ...do something else... ENDIF(WIN32)

También hay una gran cantidad de comandos con los que puede evitar que la compilación falle y Cmake le notificará que, por ejemplo, no tiene instalado el sistema de filesystem bibliotecas boost y regex en su sistema. Para hacer eso puedes usar la siguiente sintaxis:

find_package(Boost 1.45.0 COMPONENTS filesystem regex)

Después de verificar que generará los archivos make para el sistema / IDE / compilador apropiado.


El secreto es que no tienes que entender lo que hacen los archivos generados.

CMake introduce mucha complejidad en el sistema de compilación, la mayoría de los cuales solo rinde frutos si lo usa para crear proyectos de software complejos.

La buena noticia es que CMake hace un buen trabajo para mantener lejos de ti este gran desorden: utiliza versiones fuera de la fuente y ni siquiera tienes que mirar los archivos generados. Si no hizo esto hasta el momento (que supongo que es el caso, ya que escribió cmake . ), cmake . antes de continuar . Mezclar la compilación y el directorio de origen es realmente doloroso con CMake y no es cómo se supone que se debe usar el sistema.

En pocas palabras: en lugar de

cd <source_dir> cmake .

siempre usa

cd <build_dir_different_from_source_dir> cmake <source_dir>

en lugar. Usualmente uso una build subcarpetas vacía dentro de mi directorio de origen como directorio de compilación.

Para aliviar su dolor, permítame dar una visión general rápida de los archivos relevantes que CMake genera:

  • Archivos de proyecto / Makefiles : lo que realmente le interesa: los archivos necesarios para construir su proyecto en el generador seleccionado. Esto puede ser cualquier cosa desde un Makefile de Unix a una solución de Visual Studio.
  • CMakeCache.txt : este es un almacenamiento de cadena de clave / valor persistente que se utiliza para almacenar en caché el valor entre ejecuciones. Los valores almacenados aquí pueden ser rutas a dependencias de biblioteca o si se debe construir un componente opcional. La lista de variables es en su mayoría idéntica a la que se ve al ejecutar ccmake o cmake-gui . Esto puede ser útil para observar de vez en cuando, pero recomendaría usar las herramientas mencionadas anteriormente para cambiar cualquiera de los valores si es posible.
  • Archivos generados : puede ser cualquier cosa, desde archivos fuente autogenerados hasta macros de exportación que lo ayuden a reintegrar su proyecto construido con otros proyectos de CMake. La mayoría de estos solo se generan a pedido y no aparecerán en un proyecto simple como el de su pregunta.
  • Cualquier otra cosa es bastante ruido para mantener el sistema de compilación feliz. En particular, nunca tuve que preocuparme por nada que esté sucediendo dentro del subdirectorio CMakeFiles .

En general, no debe meterse con ninguno de los archivos que CMake genera para usted. Todos los problemas se pueden resolver desde CMakeLists.txt de una forma u otra. Mientras el resultado construya su proyecto como se esperaba, probablemente esté bien. No se preocupe demasiado por los detalles sangrientos, ya que esto es lo que CMake estaba tratando de evitarle en primer lugar.