CMake学习笔记(一)

 1.CMake介绍

CMake是一个管理源代码构建的工具。最初,CMake被设计为各种语言的生成器,今天CMake生成现代构建系统,以及用于IDE的项目文件,如Visual Studio和Xcode。

CMake广泛用于C和C++语言,但它也可用于构建其他语言的源代码。

第一次遇到CMake的人可能有不同的初始目标。要了解如何构建从 Internet 下载的源代码包,请从用户交互指南开始。这将详细说明运行 cmake(1) 或 cmake-gui(1) 可执行文件所需的步骤, 以及如何选择生成器, 以及如何完成构建。

使用 依赖项指南面向希望开始使用第三方库的开发人员。

对于使用 CMake 启动项目的开发人员来说,CMake 教程是一个合适的起点。cmake-buildsystem(7) 手册旨在让开发人员扩展他们维护构建系统的知识,并熟悉可以在 CMake 中表示的构建目标。cmake-packages(7) 手册解释了如何创建可由第三方基于 CMake 的构建系统轻松使用的软件包。

 以上信息均可在Cmake官网上查询得到,就不多做解释,下面直接开始实例演示。

2.CMakeLists.txt

在实例前,我们需要编写一个叫做CMakeLists.txt的文件,通过它来指定需要编译的文件和库等.

为了规范化工程,按下面目录创建一个src文件夹来存放源代码,创建一个build文件夹来存放生成的Makefile文件等.

工程下的文件树如下:

tree -L 2
.
├── build
├── CMakeLists.txt
└── src
    └── test.cpp

2 directories, 2 files

CMakeLists.txt内容如下: 

#指定运行的CMake最低版本号,可通过cmake --version查看当前版本
cmake_minimum_required(VERSION 3.10)
#设置工程名
project(firstapp)
#设置编译后的可执行程序名
add_executable(firstapp src/test.cpp)

src/test.cpp 

#include <iostream>
using namespace std;
int main()
{
    cout << "test!\n";
    return 0;
}

接下来进入build目录下

cd build;cmake ../;cmake --build .

发现目录下生成了

tree -L 2
.
├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── cmake_install.cmake
│   ├── firstapp
│   └── Makefile
├── CMakeLists.txt
└── src
    └── test.cpp

运行其中的firstapp,出现

~/CMake/build$ ./firstapp 
test!

至此,一个简单的CMake工程已经完成,可以看到CMake比起Makefile更加的便捷和现代化.学会了之后再也不想自己写Makefile了.

当然,上面的例子过于简单,展示不出CMake的用武之地,因此我们继续增加新的功能

1.添加版本号和配置的头文件

我们将添加的第一个功能是为我们的可执行文件和项目提供版本号。虽然我们可以在源代码中专门执行此操作,但使用CmakeLists.txt提供了更大的灵活性。

首先,修改文件以使用 project() 命令设置项目名称和版本号。

CMakeLists.txt文件内容如下:

#指定运行的CMake最低版本号,可通过cmake --version查看当前版本
cmake_minimum_required(VERSION 3.10)
#设置工程名
project(Firstapp VERSION 1.0)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

#设置编译后的可执行程序名
add_executable(Firstapp ./src/test.cpp)
#指定C++标准

#配置头文件以将版本号传递给源代码
configure_file(${CMAKE_SOURCE_DIR}/Config/testConfig.h.in ${CMAKE_SOURCE_DIR}/include/testConfig.h)
#由于配置文件将被写入二叉树,因此我们必须将该目录添加到路径列表中以搜索包含文件。
#将以下行添加到文件末尾
target_include_directories(Firstapp PUBLIC "${CMAKE_SOURCE_DIR}")
target_include_directories(Firstapp PUBLIC "${CMAKE_SOURCE_DIR}/include")

在CMakeLists.txt同级目录下创建一个Config文件夹,并创建一个testConfig.h.in文件,用来存放生成的配置文件.testConfig.h.in文件内容如下:

#define FIRSTAPP_VERSION_MAJOR @Firstapp_VERSION_MAJOR@
#define FIRSTAPP_VERSION_MINOR @Firstapp_VERSION_MINOR@
//test.h
#ifndef __TEST_H__
#define __TEST_H__
#include <iostream>
#endif

//test.cpp

#include "testConfig.h"
#include "test.h"
int main(int argc,char **argv)
{
    if (argc < 2) {
        // report version
        std::cout << argv[0] << " Version " << FIRSTAPP_VERSION_MAJOR << "."
        << FIRSTAPP_VERSION_MINOR << std::endl;
        std::cout << "Usage: " << argv[0] << " number" << std::endl;
        return 1;
    }
    const double inputValue = std::stod(argv[1]);
    std::cout << inputValue <<std::endl;
    return 0;
}

编译,运行程序后,出现./Firstapp Version 1.0打印.说明版本号添加成功.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值