CMake

1、语法:

    #注释行

    Lists A;B;C

    变量:{VAR}

    条件结构:IF() ... ELSE()/ELSEIF() ... ENDIF()

                    WHILE() ... ENDWHILE()

                    FOREAH() ... ENDFOREACH()

 

2、CMake变量

    CMAE_MODULE_PATH:CMake Modules的路径;

    CMAKE_INSTALL_PRFIX:make install路径;

    CMAKE_BUILD_TYPE:BUILD类型(Debug,Release);

    BUILD_SHARE_LIBS:动态库还是静态库选项(cmake -DBUILD_SHARE_LIBS=OFF);

 

3、CMake方法

   子目录:

        SUBDIRS(Dir1, Dir2)

        ADD_SUBDIRECTORY(Dir1)

        ADD_SUBDIRECTORY(Dir2)

    宏定义:

         ADD_DEFINITION("-Wall -ansi -pedantic")

    依赖:

         ADD_DEPENDENCIES(TARGET DEPEND1 DEPED2)

    目标文件:

         ADD_EXECUTABLE:编译为可执行文件;

         ADD_LIBRARY:编译为库文件;

    链接所依赖的库文件:

         TARGET_LINK_LIBRARY(TARGET-NAME LIB1 LIB2)    指定单个目标文件的库文件依赖;

         LINK_LIBRARIES(LIB1 LIB2)                                        指定所有目标文件的库文件依赖;

    安装:

        INSTALL(FILES FILE1 FILE2 FILE3 DESTINATION .)       安装FILE1、FILE2、FILE3到.路径;

    输出:

        MESSAGE(STATUS|FATAL_ERROR "message")

    LIST函数:

        APPEND, INSERT, LENGTH, GET, REMOVE_ITEM, REMOVE_A, SORT等;

    STRING函数:

         TOUPPER, TOLOWER, LENGTH, SUSTRING, REPLACE等;

 

3、示例:

    目录结构:

    CMakeLists.txt

    内容:PROJECT(HELLO)

              ADD_SUBDIECTORY(Hello)

              ADD_SUBDIECTORY(Test)

    Hello

        CMakeLists.txt

         内容:ADD_LIBRARY(Hellohello.cpp)

        hello.h

        hello.cpp

    Test

         CMakeLists.txt

         内容:INCLUDE_DIRECTORIES({HELLO_SOURCE_DIRECTORY}/Hello)

                  ADD_EXECUTABLE(helloworld test.cpp)

                  TARGET_LINK_LIBRARY(helloworld Hello)

         test.cpp

 

转摘:

1、ADD_DEFINITIONS
    向 C/C++编译器添加-D 定义,比如:ADD_DEFINITIONS(-DENABLE_DEBUG  -DABC)

 

2、CMAKE_C_FLAGS/CMAKE_CXX_FLAGS

    添加其他的编译器开关;

 

3、ADD_DEPENDENCIES
    定义 target 依赖的其他 target,确保在编译本 target 之前,其他的 target 已经被构建

 

4、AUX_SOURCE_DIRECTORY
    发现一个目录下所有的源代码文件并将列表存储在一个变量中;

    AUX_SOURCE_DIRECTORY(dir VARIABLE)

5、EXEC_PROGRAM

    在 CMakeLists.txt 处理过程中执行命令,并不会在生成的 Makefile 中执行
    语法为:
    EXEC_PROGRAM(Executable [directory in which to run]
                     [ARGS <arguments to executable>]
                     [OUTPUT_VARIABLE <var>]
                     [RETURN_VALUE <var>])
    用于在指定的目录运行某个程序,通过 ARGS 添加参数,如果要获取输出和返回值,可通过OUTPUT_VARIABLE 和 RETURN_VALUE 分别定义两个变量.

6、FILE

     文件操作指令,基本语法为:
         FILE(WRITE filename "message to write"... )
         FILE(APPEND filename "message to write"... )
         FILE(READ filename variable)
         FILE(GLOB variable [RELATIVE path] [globbing expression_rs]...)
         FILE(GLOB_RECURSE variable [RELATIVE path] [globbing expression_rs]...)
         FILE(REMOVE [directory]...)
         FILE(REMOVE_RECURSE [directory]...)
         FILE(MAKE_DIRECTORY [directory]...)
         FILE(RELATIVE_PATH variable directory file)
         FILE(TO_CMAKE_PATH path result)
         FILE(TO_NATIVE_PATH path result)

 

  

### CMake 使用教程、安装配置及常见问题解决方案 #### 安装 CMake 在不同的操作系统中,CMake 的安装方式有所不同。以下是一些常见的安装方法: ##### Linux 系统(以 Ubuntu 为例) 1. **离线安装** 可以从 [CMake 官网](https://cmake.org/download/) 下载适用于 Linux 的压缩包(如 `cmake-x.x.x-linux-x86_64.tar.gz`),然后进行手动安装: ```bash tar -xzvf cmake-x.x.x-linux-x86_64.tar.gz ``` 2. **配置环境变量** 将 CMake 的 `bin` 目录添加到系统环境变量中,以便全局使用: ```bash export PATH=/path/to/cmake/bin:$PATH ``` 可以将上述命令添加到 `~/.bashrc` 或 `~/.zshrc` 文件中,以便每次启动终端时自动加载: ```bash echo 'export PATH=/path/to/cmake/bin:$PATH' >> ~/.bashrc source ~/.bashrc ``` 3. **验证安装** 使用以下命令确认 CMake 是否安装成功: ```bash cmake --version ``` 如果输出 CMake 的版本号,则表示安装成功[^1]。 ##### Windows 系统 1. 从 [CMake 官网](https://cmake.org/download/) 下载 Windows 安装包(`.msi` 文件)。 2. 运行安装程序,并选择将 CMake 添加到系统环境变量中。 3. 打开命令提示符(CMD)或 PowerShell,输入以下命令验证安装: ```bash cmake --version ``` ##### macOS 系统 可以使用 Homebrew 安装 CMake: ```bash brew install cmake ``` 验证安装: ```bash cmake --version ``` #### 配置 CMake 项目 CMake 项目的核心是 `CMakeLists.txt` 文件,它定义了项目的构建规则。以下是一个简单的 CMake 项目配置示例: ```cmake # 指定 CMake 最低版本 cmake_minimum_required(VERSION 3.10) # 定义项目名称 project(HelloCMake) # 添加可执行文件目标 add_executable(hello main.cpp) ``` 1. **创建构建目录** 通常建议在项目根目录下创建一个 `build` 子目录用于存放构建生成的文件: ```bash mkdir build cd build ``` 2. **生成构建文件** 在构建目录中运行 CMake,生成 Makefile 或其他构建系统所需的文件: ```bash cmake .. ``` 3. **编译项目** 使用 `make` 命令进行编译(适用于 Linux/macOS): ```bash make ``` 或者使用 Visual Studio 打开 `.sln` 文件进行编译(适用于 Windows)。 #### 常见问题及解决方法 1. **CMake 找不到编译器** - **问题描述**:CMake 在配置过程中提示找不到编译器。 - **解决方法**:确保系统中已安装编译器(如 GCC、Clang 或 MSVC),并且编译器的路径已添加到系统环境变量中。 2. **CMakeLists.txt 文件语法错误** - **问题描述**:CMake 配置失败,提示语法错误。 - **解决方法**:检查 `CMakeLists.txt` 文件中的语法是否正确,特别是命令的大小写和参数顺序。 3. **找不到依赖库** - **问题描述**:编译过程中提示找不到某些依赖库。 - **解决方法**:确保所有依赖库已正确安装,并且在 `CMakeLists.txt` 中使用 `find_package()` 或 `include_directories()` 正确引用。 4. **Android Studio 中使用 CMake** - **问题描述**:在 Android Studio 中配置 CMake 时遇到问题。 - **解决方法**:可以使用 Android Studio 自带的 CMake 支持,创建一个支持 C++ 的项目,查看生成的 `CMakeLists.txt` 文件,确保路径和依赖项配置正确[^5]。 #### 学习资源 - **《CMake + Practice》**:这是一篇适合初学者的中文入门教程,适合了解 CMake 的基本概念和使用方法[^2]。 - **官方文档**:[CMake 官方文档](https://cmake.org/cmake/help/latest/) 是深入了解 CMake 各种命令和高级用法的最佳资源。 - **实践项目**:通过实际项目学习 CMake 的使用,尤其是复杂的项目结构和依赖管理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值