2020-10-22-CMake基础

单个目录单个文件

  1. CMakeLists.txt怎么写

    cmake_minimum_required(VERSION 3.6)
    project(myproj)
    add_executable(exea main.cpp)
    

    说明:

    • 第一行指定最低的cmake版本号。
    • 第二行指明工程的名字。
    • 第三行指生成可执行文件。参数1是可执行文件的名字,参数2是源文件名。
  2. CMakeLists.txt写好了怎么用

    • 在CMakeLists.txt所在的目录下打开终端
    • 输入cmake ./来生成makefile
    • 输入make来生成可执行文件
    • 输入./exea来执行程序。

单个目录多个文件

  1. CMakeLists.txt怎么写

    cmake_minimum_required(VERSION 3.6)
    project(myproj)
    aux_source_directory(./ BIAN_LIANG_1)
    add_executable(exea ${BIAN_LIANG_1})
    

    说明:

    • 第三行是指把当前目录下的所有源文件赋值给一个变量,参数1是目录,参数2是变量名。

多个目录多个文件

  1. 目录结构是怎样的

    • 假设项目的根目录下有CMakeLists.txtmain.cppmylib,其中mylib是文件夹。

    • mylib下面有CMakeLists.txtmymath.hmymath.cpp

  2. 内层的文件展示

    • mymath.h
    int f(int a, int b);
    
    • mymath.cpp
    #include "mymath.h"
    int f(int a, int b)
    {
        return (a + b);
    }
    
    • CMakeLists.txt
    aux_source_directory(./ bianlianga)
    add_library(MyLibMath ${bianlianga})
    
  3. 外层文件展示

    • main.cpp
    #include 
    #include "mylib/mymath.h"
    int main(int argc, char * argv[])
    {
        int a = 0;
        int b = 0;
        scanf("%d", &a);
        scanf("%d", &b);
        printf("a+b=%d\n", f(a, b));
        return 0;
    }
    
    • CMakeLists.txt
    cmake_minimum_required(VERSION 3.6)
    project(myproj)
    add_subdirectory(./mylib)
    #向当前工程添加存放源文件的子目录
    aux_source_directory(./ BIAN_LIANG_1)
    add_executable(exea ${BIAN_LIANG_1})
    target_link_libraries(exea MyLibMath)
    #向target添加需要链接的库
    

多个目录多个文件的标准格式

  1. 啥是标准格式?

    • 根目录只有一个CMakeLists.txt和若干个文件夹。
    • 编译过程中产生的中间文件单独放一个文件夹里,不会污染源文件目录。
  2. 例子的目录结构是怎样的?

    • 根目录下有一个CMakeLists.txt、src文件夹、mylib文件夹、build文件夹。
    • src下有一个main.cpp、CMakeLists.txt。
    • mylib下有mymath.h和mymath.cpp和CMakeLists.txt。
    • build目录为空。
  3. src文件夹内容展示

    include_directories(${project_source_dir}/mylib)
    #向工程添加多个特定的头文件搜索路径
    aux_source_directory(./ bianlianga)
    add_executable(exea ${bianlianga})
    target_link_libraries(exea MyLibMath)
    
    #include 
    #include "../mylib/mymath.h"
    int main(int argc, char * argv[])
    {
        int a = 0;
        int b = 0;
        scanf("%d", &a);
        scanf("%d", &b);
        printf("a+b=%d\n", f(a, b));
        return 0;
    }
    
  4. 顶层的CMakeLists.txt

    cmake_minimum_required(VERSION 3.6)
    project(myproj)
    add_subdirectory(./mylib)
    add_subdirectory(./src)
    
  5. 使用注意,cd到build目录下

    cd build/
    cmake ..
    make
    ./src/exea
    

你可能感兴趣的:(2020-10-22-CMake基础)