CMakeLists 小学-2

经过小学一年级(CMakeLists 小学-1)的勤奋学习,现在终于上小学二年级了。

上一篇文章里出现了几个变量:

  • PROJECT_BINARY_DIR
  • CMAKE_BINARY_DIR
  • LIBRARY_OUTPUT_PATH
  • EXECUTABLE_OUTPUT_PATH

这些变量(variable)名不是我起的,是cmake自带的!cmake生来就有的!

实际上,cmake变量远不止这几个,还有很多很多。

现在让我们走近这些 variable

在终端(terminal)中输入以下命令,查看cmake帮助文档

cmake --help

发现cmake的使用方法如下(节选):

Usage

  cmake [options] <path-to-source>
  cmake [options] <path-to-existing-build>

Specify a source directory to (re-)generate a build system for it in the
current working directory.  Specify an existing build directory to
re-generate its build system.

[options]表示可选项。" [ ] "表示可选项,这是常识。

<path-to-source>表示CMakeLists所在的目录(directory)。这个参数是必须要有的。

用法里说:

指定一个源码目录(即,CMakeLists所在目录),在当前目录下生成一个构建系统(build system)。

指定一个已存在的构建目录会重新生成构建系统。

1.查看变量

看帮助文档,找到这么两个option,查看变量的方法:

--help-variable-list [<f>]   = List variables with help available and exit.
--help-variable var [<f>]    = Print help for one variable and exit.

我们可以查看cmake里个各个变量的意义了:


注意到,这里有一个in-source build,通常我们都用out-of-source 的方式构建(即,自己建立一个build目录)。


现在cmake自带的变量我们都明白了。

可有些变量不是cmake自带的,但是又很常用,我们也要了解一下。

这些变量来自哪里呢?

答:来自第三方库。

比如:Threads里的CMAKE_THREAD_LIBS_INIT,Boost里的Boost_SYSTEM_LIBRARY。

我们通过引用module(组件,模块)的方式引入第三方库。

在cmake自带的变量里,有一个CMAKE_MODULE_PATH  ,这个变量是一个路径,这个路径下放着一些Modules。

   CMAKE_MODULE_PATH  帮助:大致意思是,这个路径cmake modules存放的默认路径,当使用includefind_package命令的时候,就从这个路径下找对应的module。

用以下命令可以找到cmake modules所在路径,-type  d 表示查找目录

sudo find / -iname "modules" -type d | grep -i "cmake"
我的路径是: /usr/share/cmake-3.5/Modules

Threads Boost 都对应的module在这个路径下(FindThreads.cmake和FindBoost.cmake)

我们通常用find_package引入module(第三方库,感觉翻译成中文不是很准确)。具体操作下一篇博客再谈。

2.查看命令

看帮助文档,找到这么两个option,查看命令的方法:

--help-command-list [<f>]    = List commands with help available and exit.
--help-command <cmd> [<f>]   = Print help for one command and exit.

一共一百多个命令(command),每个命令的讲解都很长、很详细。

set,find_package,add_executable,add_subdirectory,if,等等。


3.Generators 生成器

generator有很多,先了解下面两个:

Unix Makefiles               = Generates standard UNIX makefiles.
Ninja                        = Generates build.ninja files.

Makefile我们比较熟悉了,前面我们都是cmake CMakeLists.txt生成Makefile,再make,以构建整个工程。

那么,Ninja是什么?

  • Ninja is a small build system with a focus on speed.[1]
  • build.ninja 文件类似于 Makefile
  • Ninja教程

4.总结

Google现在都抛弃GYP,全面使用GN了。我还在学CMake,诶。。继续加油了

推荐两篇博客:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值