cmake学习小记

一、cmake是什么?

它是一种项目构建工具

二、为何要使用项目构建工具

  • “Hello, world!“这个最经典的程序相信我们每个人都写过。无论在什么平台下,编译和运行这个程序都仅需要非常简单的操作。但事实上,hello,world最多只能算是一个实例程序,根本算不上一个真正的软件项目。
    任何一个软件项目,除了写代码之外,还有一个更为重要的任务,就是如何组织和管理这些代码,使项目代码层次结构清晰易读,这对以后的维护工作大有裨益。试想一下,如果把一个像KDE4那么大的项目像hello world那样,把全部代码都放到一个main.cpp文件中,那将会是多么恐怖的一件事情。别说KDE4,就是我们随便一个几千行代码的小项目,也不会有人干这种蠢事。决定代码的组织方式及其编译方式,也是程序设计的一部分。因此,我们需要cmake和autotools这样的工具来帮助我们构建并维护项目代码。

三、cmake和makefile的关系


看到这里,也许你会想到makefile,makefile不就是管理代码自动化编译的工具吗?为什么还要用别的构建工具?
其实,cmake和autotools正是makefile的上层工具,它们的目的正是为了产生可移植的makefile,并简化自己动手写makefile时的巨大工作量。如果你自己动手写过makefile,你会发现,makefile通常依赖于你当前的编译平台,而且编写makefile的工作量比较大,解决依赖关系时也容易出错。因此,对于大多数项目,应当考虑使用更自动化一些的 cmake或者autotools来生成makefile,而不是上来就动手编写。

四、cmake的使用

详细的用几个例子教会你如何使用cmake(cmake学习笔记)

1、问题说明

对上边的例子实际操作中我自己的电脑出现的问题再此说明一下

cmake .. -G"MinGW Makefiles"
make

在build下边执行上边的编译命令,出现找不到generator
在这里你要查看自己电脑上有的那些generator,找到适合你的项目的

cmake .. -G"generator Makefiles"
make

提示:为什么要用到不同的generator
cmake会通过cmakelist.txt文件,生成适用于不同项目类型的makefile文件,然后makefile文件被不同的编译器使用进行编译,考虑到C/C++的开发环境之多,有非常多的种类的项目开发环境,但是cmake基本上都考虑到了。
CMake支持下列generator:(有很多generator,生成适用于不同项目类型的makefile文件)
Visual Studio 6: 生成Visual Studio 6 工程文件。
Visual Studio 7: 生成Visual Studio .NET 2002 工程文件。
MSYS Makefiles: 生成MSYS makefile。 生成的makefile用 /bin/sh作为它的shell。在运行CMake的机器上需要安装msys
MinGW Makefiles: 生成供mingw32-make使用的make file。 生成的makefile使用cmd.exe作为它的shell。生成它们不需要msys或者unix shell。

2、add_definitions()

使用这个函数可以在我们更改别人代码做实验时使用,既不对其源码进行破坏,又可以添加自己的功能。之前都是在程序中进行#define,有了这个后可以直接在编译的时候进行选择。具体的,在工程CMakeLists.txt 中,使用add_definitions()函数控制代码的开启和关闭:

option(TEST_DEBUG "option for debug" OFF) 
if (TEST_DEBUG)                                
add_definitions(-DTEST_DEBUG)                     
endif(TEST_DEBUG)

运行构建项目的时候可以添加参数控制宏的开启和关闭.

cmake -DUSE_MACRO = on .. #打开
cmake  -DUSE_MACRO=off .. #关闭

在源码中就可以使用:

#ifdef TEST_DEBUG
...
...
#else 
...
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值