美文网首页
CMake学习

CMake学习

作者: smallest_one | 来源:发表于2018-08-03 09:27 被阅读21次

    目录

    1. 什么是CMake?
    2. linux平台安装CMake
    3. CMake的helloworld

    1. 什么是CMake?

    Make工具应该大家都用过,但是不同平台的Make工具遵循着不同的规范和标准,例如GUN Make,QT的qmake,微软的MS nmake等等。这样就带来了一个严峻的问题,如果软件需要跨平台,必须要保证能够在不同平台编译。而如果使用上面的Make工具,就需要为每一种标准写一次Makefile。

    CMake就是针对上面问题所设计的工具。

    它使用一种平台无关的CMakeLists.txt文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化Makefile和工程文件,如Unix的Makefile或Windows的Visual Studio工程。从而做到“Write once, run everywhere”。很多知名的开源项目都有使用CMake作为项目构架系统,如KDE、OpenCV等。

    2. linux平台安装CMake

    1. 首先去官网下载安装包,选择“XX.tar.gz”源码安装包。
    2. 输入以下命令
    $tar -zxvf xx.tar.gz
    $./bootstrap
    $make
    $make install
    

    输入以上命令后就安装后cmake了。

    3. CMake的helloworld

    在linux平台使用CMake生成Makefile并编译的流程如下:

    1. 编写CMake配置文件CMakeLists.txt。
    2. 执行命令 cmake path 生成Makefile。其中,PATH是CMakeLists.txt所在的目录。
    3. 使用make命令进行编译。

    以下使用一个简单的示例说明以下。

    新建一个目录t1,建立main.c和CMakeLists.txt。

    main.c文件内容:

    //main.c
    #include <stdio.h>
    int main()
    {
    printf(“Hello World from t1 Main!\n”);
    return 0;
    }
    

    CMakeLists.txt的文件内容:

    # CMake 最低版本号要求
    cmake_minimum_required (VERSION 2.8)
    # 项目信息
    project(HELLO)
    # 指定生成目标
    add_executable(hello main.c)
    

    CMakeLists.txt 的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的,参数和变量是大小写相关的。符号 # 后面的内容被认为是注释。命令由命令名称、小括号和参数组成,参数之间使用空格或分号进行间隔。

    以上CMakeLists.txt文件,依次出现了几个命令

    1. cmake_minimum_required:指定运行配置文件所需CMake的最低版本。
    2. project:参数值是HELLO,该命令表示项目的名称是HELLO。
    3. add_executable:将名为main.c的源文件编译为一个名称为hello的可执行文件。

    上面的例子只有一个源文件,现在如果main.c下有其他的源文件需要参与编译,需要把CMakeLists.txt修改如下:

    # CMake 最低版本号要求
    cmake_minimum_required (VERSION 2.8)
    # 项目信息
    project(HELLO)
    
    # 查找当前目录下的所有源文件
    # 并将名称保存到 DIR_SRCS 变量
    aux_source_directory(. DIR_SRCS)
    # 指定生成目标
    add_executable(hello ${DIR_SRCS})
    

    这样,CMake会讲当前目录所有源文件的文件名赋值给变量DIR_SRCS,再指示DIR_SRCS中的源文件需要编译成一个名称为hello的可执行文件。

    如果我们需要把源文件编译为一个静态库,修改CMakeLists.txt如下

    
    # CMake 最低版本号要求
    cmake_minimum_required (VERSION 2.8)
    # 查找当前目录下的所有源文件
    # 并将名称保存到 DIR_LIB_SRCS 变量
    aux_source_directory(. DIR_LIB_SRCS)
    # 生成链接库
    add_library (hello ${DIR_LIB_SRCS})
    

    命令 add_library 将目录中的源文件编译为静态链接库。
    如果要生成动态库修改脚本的最后一行如下:

    add_library (hello SHARED $(DIRLIB_SRCS))
    

    参考:

    1. http://www.hahack.com/codes/cmake/

    相关文章

      网友评论

          本文标题:CMake学习

          本文链接:https://www.haomeiwen.com/subject/lageqftx.html