Descripción del primer proyecto hello world creado por CMake Tool
1. Objeto del proyecto
Aquí creamos automáticamente un proyecto CMake para nosotros a través de la herramienta CMake de vscode.
Para obtener detalles sobre cómo hacer esto, consulte mi otra publicación de blog:
vscode usa el complemento CMake Tool para compilar el primer proyecto CMake helloworld
Una vez completada la creación, se generan un main.cpp, un CMakeLists.txt y un directorio de compilación.
Abra CMakeLists.txt, puede ver el siguiente contenido:
cmake_minimum_required(VERSION 3.0.0)
project(hello VERSION 0.1.0)
include(CTest)
enable_testing()
add_executable(hello main.cpp)
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
Por el momento, nos centraremos en las siguientes líneas, que son el contenido principal, y no importa si otro contenido puede incluso eliminarse temporalmente:
// 指定cmake使用的最低版本号
cmake_minimum_required(VERSION 3.0.0)
// 设定工程的名字为hello, 版本号为0.1.0
project(hello VERSION 0.1.0)
// 生成名为hello的可执行文件,相关的源文件是main.cpp
add_executable(hello main.cpp)
Dos, descripción de la sintaxis CMakeLists.txt
A través de este ejemplo, puede tener una comprensión general de CMake. Aquí hay algunas explicaciones simples para ello.
Echemos un vistazo a CMakeLists.txt nuevamente. Este archivo es el archivo de definición de compilación de cmake. El nombre del archivo distingue entre mayúsculas y minúsculas. Si hay varios directorios en el proyecto, debe asegurarse de que haya un CMakeLists.txt para cada uno. directorio a administrar. (En cuanto a la construcción de directorios múltiples, lo mencionaremos más adelante, por lo que no explicaré demasiado aquí).
- La sintaxis de la directiva PROYECTO es:
PROJECT(projectname [CXX] [C] [Java])
Puede usar este comando para definir el nombre del proyecto y especificar los idiomas admitidos por el proyecto. La lista de idiomas admitidos se puede ignorar y el valor predeterminado es admitir todos los idiomas. Esta instrucción define implícitamente dos variables cmake: <nombre del proyecto>_BINARY_DIR y <nombre del proyecto>_SOURCE_DIR, aquí están HELLO_BINARY_DIR y HELLO_SOURCE_DIR.
Al mismo tiempo, el sistema cmake también nos ayuda a predefinir las variables PROJECT_BINARY_DIR y PROJECT_SOURCE_DIR, y sus valores son consistentes con HELLO_BINARY_DIR y HELLO_SOURCE_DIR respectivamente. En aras de la uniformidad, se recomienda utilizar PROJECT_BINARY_DIR y PROJECT_SOURCE_DIR directamente en el futuro, incluso si se modifica el nombre del proyecto, estas dos variables no se verán afectadas. Si se usa <projectname>_SOURCE_DIR, después de modificar el nombre del proyecto, estas variables también deben modificarse al mismo tiempo, lo cual es un inconveniente.
- La sintaxis del comando SET es:
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
En esta etapa, todo lo que necesita saber es que el comando SET se puede usar para definir variables explícitamente. Por ejemplo, usamos SET(SRC_LIST main.c), si hay varios archivos fuente, también se puede definir como:
SET(SRC_LIST main.c t1.c t2.c)。
- ADD_EXECUTABLE
ADD_EXECUTABLE(hello ${SRC_LIST})
Después de definir este proyecto, se generará un archivo ejecutable llamado hello. Los archivos de origen relacionados son la
lista de archivos de origen definida en SRC_LIST. En este ejemplo, también puede escribir directamente ADD_EXECUTABLE(hello main.cpp).
Lo que debe explicarse aquí es que hola como el nombre del proyecto no tiene nada que ver con el archivo ejecutable generado hola, puede escribirlo como
ADD_EXECUTABLE(my_exe main.cpp)
Las reglas de sintaxis más simples son:
- Las variables usan ${} para tomar valores, pero el nombre de la variable se usa directamente en la declaración de control IF
- Los parámetros de las instrucciones (parámetro 1, parámetro 2...)
se encierran entre corchetes y se separan por espacios o punto y coma.
Tome la instrucción ADD_EXECUTABLE anterior como ejemplo, si hay otro archivo fuente func.c, debe escribirse como:
ADD_EXECUTABLE(hello main.c func.c) o
ADD_EXECUTABLE(hello main.c;func.c) - Las directivas no distinguen entre mayúsculas y minúsculas, los parámetros y las variables distinguen entre mayúsculas y minúsculas.
Limpieza del proyecto:
make clean
3. Explicación sobre construcción interna y construcción externa
Hay otro recordatorio muy importante, es decir: en el ejemplo anterior, realizamos una compilación interna (compilación en la fuente) y cmake recomienda encarecidamente una compilación externa (compilación fuera de la fuente).
Sobre la construcción interna y la construcción externa, se presentará en detalle en otra publicación de blog.