• CMake快速入门


    参考: https://www.hahack.com/codes/cmake/

    1. 单目标文件

    main.c

    #include <stdio.h>     
    #include <stdlib.h>    
    
    
    
    double power(double base, int exponent)
    { 
        int result = base; 
        int i;
        
        if (exponent == 0) {    
            return 1;
        }
        
        for(i = 1; i < exponent; ++i){
            result = result * base; 
        }
        return result;
    }
    
    int main(int argc, char *argv[])
    {
        if (argc < 3){
            printf("Usage: %s base exponent 
    ", argv[0]);
            return 1;
        }
    
        double base = atof(argv[1]);
        int exponent = atoi(argv[2]);
        double result = power(base, exponent);
        printf("%g ^ %d is %g
    ", base, exponent, result);
        
        return 0;
    }

    CMakeLists.txt

    cmake_minimum_required (VERSION 2.8)   # 指定最低的版本号
    
    # 项目信息
    project (Demo01_cmake)
    
    # 指定生成目标
    add_executable(Demo_exe main.c)       # Demo_exe为生成的可执行文件 main.c为依赖文件

    然后 

    cmake .    # 生成makeFile文件
    make # 执行make

    2. 同一个目录,多个源文件

    calc_power.h

    double power(double a, int b);

    calc_power.c

    #include "calc_power.h"
    
    double power(double 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 <stdio.h>                                           
    #include <stdlib.h>                                          
    #include "calc_power.h"                                      
                                                                 
    int main(int argc, char *argv[])                             
    {                                                            
        if (argc < 3){                                           
            printf("Usage: %s base exponent 
    ", argv[0]);       
            return 1;                                            
        }                                                        
                                                                 
        double base = atof(argv[1]);                             
        int exponent = atoi(argv[2]);                            
        double result = power(base, exponent);                   
        printf("%g ^ %d is %g
    ", base, exponent, result);       
                                                                 
        return 0;                                                
    }                                                            

    CMakeLists.txt

    cmake_minimum_required (VERSION 2.8)
    
    # 项目信息
    project (Demo2_cmake)
    
    # 指定生成目标
    # add_executable(Demo2_cmake main.c calc_power.c)  # 如果源文件多,这样写麻烦
    
    # 该命令会查找指定目录下的所有源文件, 然后将结果存到指定变量名
    # 如下: 查找当前目录下的所有源文件, 并将名称报错到 DIR_SRCS 变量 
    aux_source_directory(. DIR_SRCS)
    
    # 指定生成目标
    # CMake 会将当前目录所有源文件名赋值给变量 DIR_SRCS
    # 再指示变量 DIR_SRCS 中源文件 编译成一个 Demo2_exe的可执行文件
    add_executable(Demo2_exe ${DIR_SRCS})

    再执行

    cmake .
    make

     3. 多目录,多文件

    main.c

    #include <stdio.h>                                          
    #include <stdlib.h>                                         
    #include "./mymath/calc_power.h"                            
                                                                
    int main(int argc, char *argv[])                            
    {                                                           
        if (argc < 3){                                          
            printf("Usage: %s base exponent 
    ", argv[0]);      
            return 1;                                           
        }                                                       
                                                                
        double base = atof(argv[1]);                            
        int exponent = atoi(argv[2]);                           
        double result = power(base, exponent);                  
        printf("%g ^ %d is %g
    ", base, exponent, result);      
                                                                
        return 0;                                               
    }                                                           
                                                                

    mymath的目录下CMakeLists.txt

    # 查找当前目录下的所有源文件
    # 并将名称保存到 DIR_LIB_SRCS 变量
    aux_source_directory(. DIR_LIB_SRCS)
    
    # 生成链接库
    # 使用add_library 将src目录中的源文件编译成静态链接库
    add_library(calc_power $(DIR_LIB_SRCS))

    main.c所在的目录下的CMakeLists.txt

    # Make 最低版本号要求                                                      
    cmake_minimum_required (VERSION 2.8)                                       
                                                                               
    # 项目信息                                                                 
    project (Demo3_cmake)                                                      
                                                                               
    # 查找当前目录下的所有源文件                                               
    # 并将名称保存到 DIR_SRCS 变量                                             
    aux_source_directory(. DIR_SRCS)                                           
                                                                               
    # 添加 math 子目录, 这样mymath目录下的 CMakeLists.txt文件和源代码也会被处理
    add_subdirectory(mymath)                                                   
                                                                               
    # 指定生成目标                                                             
    add_executable(Demo3_exe main.c)                                           
                                                                               
    # 添加链接库, 指明可执行文件Demo3_exe 需要连接一个名为 calc_power的链接库  
    target_link_libraries(Demo3_exe calc_power)                                
                                                                               

    然后:

    cmake .
    make
  • 相关阅读:
    UVA1627-Team them up!(二分图判断+动态规划)
    UVA10817-Headmaster's Headache(动态规划基础)
    UVA1626-Brackets sequence(动态规划基础)
    UVA11584-Partitioning by Palindromes(动态规划基础)
    UVA11584-Partitioning by Palindromes(动态规划基础)
    UVA11400-Lighting System Design(动态规划基础)
    UVA12563-Jin Ge Jin Qu hao(动态规划基础)
    UVA116-Unidirectional TSP(动态规划基础)
    JavaScriptCore框架在iOS7中的对象交互和管理
    iOS7新JavaScriptCore框架入门介绍
  • 原文地址:https://www.cnblogs.com/douzujun/p/10761176.html
Copyright © 2020-2023  润新知