Linux之CMake实例演示

Posted 菠萝印象威

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 函数调用

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

运行结果:

在这里插入图片描述

以上是关于Linux之CMake实例演示的主要内容,如果未能解决你的问题,请参考以下文章

Linux之CMake实例演示

linux之Shell编程--Shell流程控制语句实例演示

linux之Shell编程--Shell参数传递实例演示

Linux之Shell编程(11)--Shell函数实例演示

Linux之Shell编程(11)--Shell函数实例演示

linux之Shell编程--Shell数组实例演示