caffe框架理解-----cmake(1)

caffe/cmke
CMake是软件项目的一个开源生成管理器,它允许开发人员以简单的可移植文本文件格式指定生成参数。然后,CMake 使用此文件为本机开发工具(包括Microsoft Visual Studio 、 Apple’s Xcode)生成项目文件,以及unix、linux、nmake 和 borland各种类型的Makefiles文件。CMake处理构建软件的困难方面,如跨平台构建、系统内省以及用户自定义生产,使用户能够轻松地为复杂的硬件和软件系统量身定制构建。。同类的还有autotools

  1. 为何要使用项目构建工具?

“Hello, world!“这个最经典的程序相信我们每个人都写过。无论在什么平台下,编译和运行这个程序都仅需要非常简单的操作。但事实上,hello,world最多只能算是一个实例程序,根本算不上一个真正的软件项目。

任何一个软件项目,除了写代码之外,还有一个更为重要的任务,就是如何组织和管理这些代码,使项目代码层次结构清晰易读,这对以后的维护工作大有裨益。使想一下,如果把一个像KDE4那么大的项目像hello world那样,把全部代码都放到一个main.cpp文件中,那将会是多么恐怖的一件事情。别说KDE4,就是我们随便一个几千行代码的小项目,也不会有人干这种蠢事。

决定代码的组织方式及其编译方式,也是程序设计的一部分。因此,我们需要cmake和autotools这样的工具来帮助我们构建并维护项目代码。
看到这里,也许你会想到makefile,makefile不就是管理代码自动化编译的工具吗?为什么还要用别的构建工具?

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

总之,项目构建工具能够帮我们在不同平台上更好地组织和管理我们的代码及其编译过程,这是我们使用它的主要原因。

如果你有许多开发人员在一个项目或多个平台上工作,则该软件不得不构建在多台计算机上。考虑到安装一台现代计算机所涉及的软件和自定义选项的范围很广,有可能两台运行相同操作系统的两台计算机有可能略有不同。CMake为单平台多机开发环境提供了许多好处,其中包括:

    1、能够自动搜索正在构建的软件所需的程序、库和头文件。其中包括在搜索程序所需的环境变量以及Windows的注册表设置能力。

    2、在源文件树之外的目录树中构建的能力。这是许多UNIX平台上一个非常有用的特点。CMake将这一特点移植到了windows上,允许开发人员删除整个构建目录,而不用担心删除源文件。

    3、能够为自动生成的文件创建复杂的自定义命令,例如Qt的moc(qt.nokia.com), Insight Toolkit的CABLE封装生成器。这些命令用于在构建过程中生产的源文件,然后再编译到软件中。

    4、在配置时能够选择可选组件。例如,VTk的几个库是可选的,并且CMake为用户提供了一个简单的方法来选择生成的库。

    5、能够从简单的文本文件中自动生成工作区和项目。这对于具有许多程序或测试用例的系统来说非常方便,每个程序或测试用例都需要单独的项目文件,通常采用IDE手段创建是一个非常繁琐的过程。

    6、能够轻松地在静态和共享构建之间切换。CMake知道如何在支持的所有平台上创建共享库和模块。处理复杂的特定于平台的链接器标志,许多UNIX系统都支持诸如内置的运行时搜索的路径的共享释放器等高级功能。

    7、自动生成文件依赖关系,并支持大多数平台上的并行构建。

  在开发跨平台软件时,CMake提供了许多附加功能:

    1、测试机器字节顺序和其他硬件具体特性的能力。

    2、一组在所有平台上工作的构建配置文件。这避免了开发人员必须在项目中以几种不同格式维护相同信息的问题。

    3、支持在所有平台上构建共享库。

    4、使用系统相关信息配置文件的能力,例如数据文件的位置和其他信息。 CMake可以创建包含诸如数据文件的路径和其他信息的头文件,其格式为#define宏。 系统特定的标志也可以放置在配置的头文件中。 这比编译器的命令行-D选项有优势,因为它允许其他构建系统使用CMake构建的库,而不必指定在构建期间使用的完全相同的命令行选项。

注:
KDE是一个用于UNIX工作站的网络透明的现代化桌面环境。

参考文献:
https://www.cnblogs.com/liu3yuan/p/6895419.html
https://blog.csdn.net/appleml/article/details/52829412
http://www.hahack.com/codes/cmake/

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值