A CMake Demo

参考这里:CMake入门——简单CMakeLists的编写

1. CMake简介

CMake是一种跨平台的开源项目管理工具,所做的事其实就是告诉编译器如何去编译链接源代码。与之相似的是直接编写makefile文件,但makefile最大的缺点就是不能跨平台,一旦更换环境就要重新编写,于是我们可以使用CMake编写CMakeLists文件来解决此问题。

你可以认为CMake是通过编写CMakeLists.txt,然后运行CMake命令,来自动生成Makefile。

2. CMake常用的命令

#cmake最小版本需求
cmake_minimum_required(VERSION xxx)

#设置此项目的名称
project(xxx) 

#生成可执行文件target ,后面填写的是生成此可执行文件所依赖的源文件列表。
add_executable(target target_source_codes) 

# 生成库文件,SHARED代表动态库,STATIC代表静态库, 最后一个参数代表此库的源文件列表
add_library(lib_name SHARED or STATIC lib_source_code) 

# 设置一个名字var_name 的变量,同时给此变量赋值为var_value
SET(var_name var_value)

# 指定编译器
# CMAKE_C_FLAGS_DEBUG          ----  C 编译器
# CMAKE_CXX_FLAGS_DEBUG        ----  C++ 编译器
# -std=c++11  使用 C++11
# -g:只是编译器,在编译的时候,产生调试信息。
# -Wall:生成所有警告信息。一下是具体的选项,可以单独使用
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11   -g  -Wall  ")

#指定编译类型,debug 或者为 release
# debug 会生成相关调试信息,可以使用 GDB 进行
# release 不会生成调试信息。当无法进行调试时查看此处是否设置为 debug.
set(CMAKE_BUILD_TYPE Debug)

# 打印消息
MESSAGE("MSG") 

#给变量var_name赋值为var_value,comment是此变量的注释,和SET 有类似的功效,用于给某变量设置默认值
option(var_name "comment" var_value) 

# 添加include路径,也就是头文件路径
include_directories(xxx) 

# 调用xxx子目录的CMakeLists.txt执行
add_subdirectory(xxx) 

# 给编译器添加xxx参数
add_compile_options(xxx)

# 给编译器添加库目录,有点儿类似-L
link_directories(xxx)

# 给目标添加依赖库,有点儿类似-l(小写的L)
target_link_libraries(target_name lib_name ...)

3. Example

一个小的可以运行的使用CMake来编译的demo放在了CSND Code China上:cmake_demo

4. 输出文件

  • CMake生成的所有文件都在build目录下,因此下面所讲的都是在build目录下可以做的事情
  • make src/add.cpp.i #对某个源文件进行预编译,add.cpp.i这个Makeppfile target可以从生成的Makefile中找到。
  • CMakeFiles/CMakeOutput.log里面会列出工具链的版本;
  • CMakeFiles/cmake_demo.dir这个目录的名字是由CMakeLists里面的target决定的。
  • CMakeFiles/cmake_demo.dir/flags.make会列出来-I(小写的i)的目录,以及-std=c++11, -g, -D,以及g++的版本和路径等
  • CMakeFiles/cmake_demo.dir/depend.internal会列出来某个单独的.o在编译时所找到的头文件;
  • CMakeFiles/cmake_demo.dir/link.txt会列出来link的命令是什么

5. 拓展阅读

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值