zoukankan      html  css  js  c++  java
  • CMake入门-01-从HelloWorld开始

    工作环境

    • 系统:macOS Mojave 10.14.6
    • CMake: Version 3.15.0-rc4

    从 Hello,World! 开始

    (1) 新建 hello 目录,创建文件 CMakeLists.txt、main.cpp

    $ mkdir hello
    $ cd hello
    $ touch CMakeLists.txt main.cpp
    $ ll
    -rw-r--r--  1 staff  staff   124B  8 14 17:19 CMakeLists.txt
    -rw-r--r--@ 1 staff  staff   145B  8 14 21:33 main.cpp
    

    (2) 编写程序代码 main.cpp,其代码如下:

    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char const *argv[]) {
      /* code */
      cout << "Hello,World!" << endl;
      return 0;
    }
    

    (3) 编写 CMakeLists.txt,如下:

    # cmake 最低版本需求,不加入此行会受到警告信息
    cmake_minimum_required(VERSION 3.15.0)
    
    # 项目名设置为 hello
    project(hello)
    
    # 将当前目录中的源文件名称赋值给变量 SRC_LIST
    aux_source_directory(. SRC_LIST)
    
    # 指示变量 SRC_LIST 中的源文件需要编译成一个名称为 hello 的可执行文件
    add_executable(hello ${SRC_LIST})
    

    (4) 执行 cmake & make 编译

    # 进入 hello 目录
    $ pwd
    /Users/staff/Desktop/hello
    $ ll
    -rw-r--r--@ 1 staff  staff   124B  8 14 17:19 CMakeLists.txt
    -rw-r--r--@ 1 staff  staff   145B  8 14 21:33 main.cpp
    
    # 执行 cmake . 命令
    $ cmake .
    -- The C compiler identification is AppleClang 10.0.1.10010046
    -- The CXX compiler identification is AppleClang 10.0.1.10010046
    -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
    -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
    -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /Users/staff/Desktop/hello
    
    # 执行 make 命令
    $ make
    Scanning dependencies of target hello
    [ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
    [100%] Linking CXX executable hello
    [100%] Built target hello
    
    # 运行我们的 hello 程序
    $ ./hello
    Hello,World!
    

    (5) 外部编译方式

    cmake 可以直接在当前目录进行编译,但是,这种做法会将所有生成的中间文件和源代码混在一起,而且 cmake 生成的 makefile 无法跟踪所有的中间文件,即不容易将所有的中间文件删除。

    • 之前编译方式的目录(中间文件和源代码混在一起):
    $ pwd
    /Users/staff/Desktop/hello
    
    $ ll
    -rw-r--r--   1 staff  staff    13K  8 14 21:50 CMakeCache.txt
    drwxr-xr-x  12 staff  staff   384B  8 14 21:51 CMakeFiles
    -rw-r--r--@  1 staff  staff   124B  8 14 17:19 CMakeLists.txt
    -rw-r--r--   1 staff  staff   4.7K  8 14 21:50 Makefile
    -rw-r--r--   1 staff  staff   1.3K  8 14 21:50 cmake_install.cmake
    -rwxr-xr-x   1 staff  staff    18K  8 14 21:51 hello
    -rw-r--r--@  1 staff  staff   145B  8 14 21:33 main.cpp
    
    $ ./hello
    Hello,World!
    
    • 使用外部编译方式:
    $ pwd
    /Users/staff/Desktop/hello
    $ ll
    -rw-r--r--@ 1 staff  staff   124B  8 14 17:19 CMakeLists.txt
    -rw-r--r--@ 1 staff  staff   145B  8 14 21:33 main.cpp
    
    # 在 hello 文件夹中新建 build 文件夹
    $ mkdir build
    $ cd build
    $ pwd
    /Users/staff/Desktop/hello/build
    
    # 在 hello/build 文件夹中,执行 cmake & make 编译
    $ cmake ..
    -- The C compiler identification is AppleClang 10.0.1.10010046
    -- The CXX compiler identification is AppleClang 10.0.1.10010046
    -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
    -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
    -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /Users/hubin/Desktop/hello/build
    
    $ make
    Scanning dependencies of target hello
    [ 50%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
    [100%] Linking CXX executable hello
    [100%] Built target hello
    
    $ ./hello
    Hello,World!
    
    • 外部编译方式的目录为:
    $ pwd
    /Users/staff/Desktop/hello
    $ tree .
    .
    ├── CMakeLists.txt
    ├── build
    │   ├── CMakeCache.txt
    │   ├── CMakeFiles
    │   │   ├── 3.15.0-rc4
    │   │   │   ├── ... 省略
    │   │   └── progress.marks
    │   ├── Makefile
    │   ├── cmake_install.cmake
    │   └── hello
    └── main.cpp
    

    相关参考:
    CMake 官方网站

    联系作者:
    联系作者


  • 相关阅读:
    Redis从入门到精通:初级篇(转)
    Spring配置中的"classpath:"与"classpath*:"的区别研究(转)
    maven常用命令
    JUC-线程池调度-ScheduledThreadPool
    JUC-线程池
    JUC-线程八锁
    JUC-ReadWriteLock
    JUC-Condition和Lock实践-线程按序交替执行
    Linux 查看.so中导出函数
    nginx配置反向代理
  • 原文地址:https://www.cnblogs.com/binglingziyu/p/cmake-01-helloworld.html
Copyright © 2011-2022 走看看