cmake安装使用

CMake 是一种跨平台的编译工具,可以自动生成 Makefile 或其他构建系统所需的文件

cmake安装

1、卸载当前旧版本的cmake
查看当前的cmake版本:cmake --version
若版本较旧,执行:sudo apt remove cmake,卸载旧版的cmake
若当前系统无cmake,可跳过这一步。

2、安装依赖
sudo apt install build-essential libssl-dev

3、下载并编译源码
cmake官方下载地址为:https://cmake.org/download/(我下载的是3.17.0)

4、执行以下命令解压:
sudo tar xf cmake-3.17.0.tar.gz
(这里可直接解压到/usr/local里,这样后面生成的可执行文件会在/usr/local/bin里创建链接)

5、环境检查、编译和安装

cd进入解压出来的文件夹,执行:
sudo ./configure
sudo make
sudo make install

6、创建软链接
sudo ln -sf /usr/local/bin/*  /usr/bin/

7、再执行:cmake -version 
如果出现版本号就代表安装成功。

cmake编译流程

  1. 编写 CMakeLists.txt 文件。

    CMakeLists.txt 文件是 CMake 的重要配置文件,用于描述项目的基本信息和编译过程中需要执行的命令、依赖关系等。具体内容根据项目不同而异,但是一般包括以下内容:

    • 项目名称和版本号
    • 添加源代码和头文件
    • 定义目标和可执行文件
    • 链接库和依赖项
    • 设置编译器和编译选项
  2. 创建 build 目录并进入。

    在源代码目录外创建一个 build 目录,这个目录用于存放编译生成的文件。进入 build 目录。

  3. 运行 cmake 命令。

    在 build 目录下运行 cmake /path/to/source 命令,/path/to/source 指的是源代码目录的路径。CMake 会解析 CMakeLists.txt 文件,并生成 Makefile 或其他构建系统所需的文件。

  4. 运行 make 命令进行编译。

    在 build 目录下运行 make 命令可以进行编译。make 会根据 Makefile 文件中的规则进行编译,生成可执行文件和一些库文件等。

  5. 运行 make install 命令进行安装(可选)。

    如果需要将编译生成的文件安装到系统中,可以在 build 目录下运行 make install 命令。这个命令会执行 CMake 中指定的安装规则,将文件复制到指定目录。

CmakeLists.txt

  1. 最小 CMakeLists.txt 文件。

    一个最小的 CMakeLists.txt 文件只需要包含以下内容即可:

    cmake_minimum_required(VERSION 3.0)
    project(projname)
    add_executable(projname main.cpp)
    

    这个文件定义了项目名称、源代码文件和可执行文件。

  2. 定义变量。

    在 CMakeLists.txt 文件中,可以定义一些变量,以便在编译过程中使用。语法如下:

    set(VAR value)
    

    这里的 VAR 表示变量名,value 是变量的值。

  3. 定义源代码和头文件。

    源代码和头文件需要在 CMakeLists.txt 文件中进行定义,以便在编译时被正确地包含。语法如下:

    include_directories(dir1 dir2 ...)
    file(GLOB SRC_FILES *.cpp)
    file(GLOB HEAD_FILES *.h)
    

    这里的 include_directories 定义了头文件所在的路径,file(GLOB SRC_FILES *.cpp) 和 file(GLOB HEAD_FILES *.h) 分别表示匹配所有的 .cpp 和 .h 文件。

  4. 添加子目录。

    如果项目中有多个子目录,可以在 CMakeLists.txt 文件中添加子目录。语法如下:

    add_subdirectory(subdir)
    

    这里的 subdir 是子目录的名称。

  5. 定义目标和可执行文件。

    在 CMakeLists.txt 文件中,需要定义编译的目标和可执行文件。语法如下:

    add_library(libname ${SRC_FILES} ${HEAD_FILES})
    add_executable(exename ${SRC_FILES})
    

    这里的 libname 表示库文件的名称,exename 表示可执行文件的名称。

  6. 链接库和依赖项。

    有时我们需要链接一些外部库,以便在编译过程中使用。语法如下:

    target_link_libraries(exename lib1 lib2 ...)
    

    这里的 exename 是可执行文件的名称,lib1、lib2 等是外部库的名称。

shell语法支持

execute_process(COMMAND command [args...]
                [WORKING_DIRECTORY dir]
                [OUTPUT_VARIABLE var]
                [RESULT_VARIABLE var]
                [ERROR_VARIABLE var]
                [INPUT_FILE file]
                [OUTPUT_FILE file]
                [ERROR_FILE file]
                [INPUT_STRING string]
                [TIMEOUT timeout_seconds]
                [RESULT_ENCODING encoding]
                [OUTPUT_STRIP_TRAILING_WHITESPACE]
                [ERROR_STRIP_TRAILING_WHITESPACE]
                [ECHO_INPUT_ON])

其中,COMMAND 参数接受一个字符串列表,这个列表中的字符串将被当作 shell 命令来执行。例如:

execute_process(COMMAND mkdir tmp)

这个命令将执行 mkdir tmp 命令创建一个名为 tmp 的目录。

CMAKE内置函数变量

内置函数:

  • cmake_minimum_required(version):指定使用的 CMake 的最低版本。
  • project(name [CXX] [C] [Java]):定义当前项目的名称和语言类型。
  • add_executable(name [source1] [source2] ...):生成可执行文件,需要指定生成可执行文件的名称和相关源文件。
  • add_library(name [STATIC | SHARED | MODULE] [source1] [source2] ...):生成库文件,可制定库类型为 STATIC(静态)、SHARED(动态)或 MODULE(插件)。
  • target_link_libraries(target_name lib_name):将某个库链接到目标文件中。

内置变量:

  • CMAKE_SOURCE_DIR:记录 CMakeLists.txt 文件所在的根目录。
  • CMAKE_BINARY_DIR:记录用于构建项目的 CMake 编译目录。
  • CMAKE_C_COMPILER:记录 C 编译器的路径和名称。
  • CMAKE_CXX_COMPILER:记录 C++ 编译器的路径和名称。
  • CMAKE_BUILD_TYPE:记录构建的类型,如 Debug 或 Release。

can not find thread

set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)

posted @ 2023-08-12 10:52  CleanSky  阅读(171)  评论(0编辑  收藏  举报