• CMake入门-03-还是HelloWorld


    工作环境

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

    Hello,World! 扩展-math 目录里的文件编译成静态库再由 main 函数调用

    (0) 初始化项目

    $ mkdir hello
    $ cd hello
    $ mkdir math build
    $ touch CMakeLists.txt main.cpp math/MathFunctions.h math/MathFunctions.cpp math/CMakeLists.txt
    $ tree
    .
    ├── build
    ├── CMakeLists.txt
    ├── main.cpp
    └── math
        ├── CMakeLists.txt
        ├── MathFunctions.cpp
        └── MathFunctions.h
    

    (1) 准备测试代码 main.cpp、math/MathFunctions.h、math/MathFunctions.cpp

    • math/MathFunctions.h
    int power(int base, int exponent);
    
    • math/MathFunctions.cpp
    #include <stdio.h>
    #include <stdlib.h>
    #include "MathFunctions.h"
    
    int power(int base, int exponent) {
        int result = base;
        int i;
    
        if (exponent == 0) {
            return 1;
        }
    
        for(i = 1; i < exponent; ++i){
            result = result * base;
        }
        return result;
    }
    
    • main.cpp
    #include <iostream>
    #include "MathFunctions.h"
    
    using namespace std;
    
    int main(int argc, char const *argv[]) {
      /* code */
      // cout << "Hello,World!" << power(2, 3) << endl;
      printf("%s power(2,3)=%d 
    ", "Hello,World!", power(2, 3));
      return 0;
    }
    

    (2) 准备 CMakeLists.txt math/CMakeLists.txt

    • CMakeLists.txt
    # CMake 最低版本号要求
    cmake_minimum_required(VERSION 3.15.0)
    
    # 项目名
    project(hello)
    
    # 查找当前目录下的所有源文件,并将名称保存到 SRC_LIST 变量
    aux_source_directory(. SRC_LIST)
    # 查找 math 目录下的所有源文件,并将名称保存到 MATH_SRC_LIST 变量
    # aux_source_directory(${PROJECT_SOURCE_DIR}/math MATH_SRC_LIST)
    
    # 添加 math 子目录 (math 目录里必须有 CMakeLists.txt),这样 math 目录下的 CMakeLists.txt 文件和源代码也会被处理
    add_subdirectory(math)
    
    # 添加头文件路径
    include_directories(${PROJECT_SOURCE_DIR}/math)
    
    # 指定生成目标
    add_executable(hello ${SRC_LIST} ${MATH_SRC_LIST})
    
    # 添加链接库
    target_link_libraries(hello MathFunctions)
    
    • math/CMakeLists.txt
    # 查找当前目录下的所有源文件,并将名称保存到 DIR_LIB_SRCS 变量
    aux_source_directory(. DIR_LIB_SRCS)
    
    # 生成链接库
    add_library (MathFunctions ${DIR_LIB_SRCS})
    

    (3) 编译运行

    $ cd hello/build
    $ 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/build
    
    $ make
    Scanning dependencies of target MathFunctions
    [ 25%] Building CXX object math/CMakeFiles/MathFunctions.dir/MathFunctions.cpp.o
    [ 50%] Linking CXX static library libMathFunctions.a
    [ 50%] Built target MathFunctions
    Scanning dependencies of target hello
    [ 75%] Building CXX object CMakeFiles/hello.dir/main.cpp.o
    [100%] Linking CXX executable hello
    [100%] Built target hello
    
    $ ./hello
    Hello,World! power(2,3)=8
    

    相关参考:
    CMake 官方网站
    CMake 入门实战

    联系作者:
    联系作者


  • 相关阅读:
    Fastify 系列教程四 (求对象、响应对象和插件)
    Fastify 系列教程三 (验证、序列化和生命周期)
    Fastify 系列教程二 (中间件、钩子函数和装饰器)
    Fastify 系列教程一 (路由和日志)
    使用 Vuejs 开发 chrome 插件的注意事项
    五十行javascript代码实现简单的双向数据绑定
    markown编辑器截图粘贴预览,并将图片传至七牛云
    线程与进程的区别
    TeamViewer卡在正在初始化显示参数
    Chrome 字体模糊解决
  • 原文地址:https://www.cnblogs.com/binglingziyu/p/cmake-03-helloworld-again.html
Copyright © 2020-2023  润新知