Linux之CMake实例演示

一.CMake简介

在Windows中,我们可以使用IDLE环境来编译我们的代码,比如visual studio、vc++6.0等,这些已经将编译的过程集成进开发环境中了。但是在其它平台上,并没有这些开发环境,所以需要我们手动编译。CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。

程序生成过程:
在这里插入图片描述

二.实例演示使用CMake编译可执行程序

单目录单源文件

创建两个文件Test.ccCMakeLists.txt
Test.cc

#include <stdio.h>
#include <stdlib.h>
double Add(double x, double y)
{
    double result=x+y;
    return result;
}

int main(int argc, char *argv[])
{
    if (argc < 3){
        printf("Usage: %s  value \n", argv[0]);
        return 1;
    }
    double x = atof(argv[1]);
    double y = atof(argv[2]);
    double result = Add(x,y);
    printf("%g + %g is %g\n", x, y, result);
    return 0;
}

在这里插入图片描述

CMakeLists.txt:

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (Test1)

# 指定生成目标
add_executable(Test Test.cc)

在这里插入图片描述
当前目录内容:
在这里插入图片描述
在当前目录下执行cmake .
在这里插入图片描述
会生成一些文件,其中有Makefile
在这里插入图片描述
打开Makefile可以看出编译的一些规则
在这里插入图片描述
这时,可以使用make命令运行Makefile使其自动编译
在这里插入图片描述
可以看到,生成Test目标程序
在这里插入图片描述
当前目录运行程序:
在这里插入图片描述
以上为简单的单个源文件使用CMake生成可执行程序,但,大部分情况不止一个源文件。

单目录多源文件

CMakeLists.txt:

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (Test2)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 指定生成目标
add_executable(Test ${DIR_SRCS})

在这里插入图片描述

CMakeLists.txt里使用变量的方式记录当前目录下的所有源文件,编译时会自动查找对应的源文件

Test.cc:

#include <stdio.h>
#include <stdlib.h>
#include "Testfun.h"
int main(int argc, char *argv[])
{
    if (argc < 3){
        printf("Usage: %s  value \n", argv[0]);
        return 1;
    }
    double x = atof(argv[1]);
    double y = atof(argv[2]);
    double result = Add(x,y);
    printf("%g + %g is %g\n", x, y, result);
    return 0;
}

在这里插入图片描述

这里Test.cc里只有main函数

Testfun.cc:

#include <stdio.h>
#include <stdlib.h>
double Add(double x, double y)
{
    double result=x+y;
    return result;
}

在这里插入图片描述
Testfun.h:

#ifndef ADD_H
#define ADD_H

extern double Add(double x, double y);

#endif

在这里插入图片描述

当前目录下的内容为:
在这里插入图片描述

编译:
在这里插入图片描述
此时生成Test可执行程序
在这里插入图片描述
运行
在这里插入图片描述

多个目录,多个源文件

将Testfun.cc和Testfun.h移入math目录
根目录文件为:
在这里插入图片描述
根目录中的CMakeLists.txt:

# CMake 最低版本号要求
cmake_minimum_required (VERSION 2.8)

# 项目信息
project (Test3)

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

# 添加 math 子目录
add_subdirectory(math)

# 指定生成目标 
add_executable(Test Test.cc)

# 添加链接库
target_link_libraries(Test Testfun)

在这里插入图片描述
根目录中的Test.cc

#include <stdio.h>
#include <stdlib.h>
#include "math/Testfun.h"
int main(int argc, char *argv[])
{
    if (argc < 3){
        printf("Usage: %s  value \n", argv[0]);
        return 1;
    }
    double x = atof(argv[1]);
    double y = atof(argv[2]);
    double result = Add(x,y);
    printf("%g + %g is %g\n", x, y, result);
    return 0;
}

在这里插入图片描述

math中文件为:
在这里插入图片描述
math目录中的CMakeLists.txt:

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_LIB_SRCS 变量
aux_source_directory(. DIR_LIB_SRCS)

# 生成链接库
add_library (Testfun ${DIR_LIB_SRCS})

在这里插入图片描述
math目录中的Testfun.cc:

#include <stdio.h>
#include <stdlib.h>
double Add(double x, double y)
{
    double result=x+y;
    return result;
}

在这里插入图片描述
math目录中的Testfun.h:

#ifndef ADD_H
#define ADD_H

extern double Add(double x, double y);

#endif

在这里插入图片描述

先将math目录里的文件编译成静态库再由 main 函数调用

编译:
在这里插入图片描述

运行结果:

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值