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 入门实战

    联系作者:
    联系作者


  • 相关阅读:
    poj 3616 Milking Time
    poj 3176 Cow Bowling
    poj 2229 Sumsets
    poj 2385 Apple Catching
    poj 3280 Cheapest Palindrome
    hdu 1530 Maximum Clique
    hdu 1102 Constructing Roads
    codeforces 592B The Monster and the Squirrel
    CDOJ 1221 Ancient Go
    hdu 1151 Air Raid(二分图最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/binglingziyu/p/cmake-03-helloworld-again.html
Copyright © 2011-2022 走看看