美文网首页
2020-10-22-CMake基础

2020-10-22-CMake基础

作者: porridgechen890 | 来源:发表于2020-10-23 00:10 被阅读0次

    单个目录单个文件

    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 <stdio.h>
      #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 <stdio.h>
      #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基础

          本文链接:https://www.haomeiwen.com/subject/nqxmmktx.html