zoukankan      html  css  js  c++  java
  • 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 入门实战

    联系作者:
    联系作者


  • 相关阅读:
    kubernetes HA 脚本
    架构之数据库分表分库
    架构之高可用性(HA)集群(Keepalived)
    架构之Nginx(负载均衡/反向代理)
    架构之消息队列
    oracle数据迁移
    Oracle中关于清除数据和释放表空间
    疑难杂症:org.hibernate.MappingException: Unknown entity,annotation配置Entity类报错
    j疑难杂症:java.lang.VerifyError: class org.hibernate.type.WrappedMaterializedBlobType overrides final method getReturnedClass.()Ljava/lang/Class;
    疑难杂症:java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion(Ljava/lang/String;)V
  • 原文地址:https://www.cnblogs.com/binglingziyu/p/cmake-03-helloworld-again.html
Copyright © 2011-2022 走看看