CMake入门和CMake外部构建

摘要:

​ CMake的基本使用

​ 适用CMake在外部构建, 防止污染工作目录

CMake

基本命令

每个目录下需要有CMakeLists.txt, 解释如何构建

  • 指定CMake最低版本号要求
    cmake_minimum_required(VERSION 2.8)

  • 指定项目名称

    project(projectName)

  • 指定生成目标

    add_executable(Demo fileList...)

    例如 add_executable(main main.cpp)

    多个文件时只需要在fileList处罗列即可, 空格隔开每个文件名, Demo则是生成的可执行文件名称

  • 执行CMake

    # cmake . .表示当前目录

  • 查找指定文件夹下所有的文件

    aux_source_directory(<dir> <variable>)

    将dir下所有文件名赋值为variable变量, 每个变量名用空格隔开

  • 添加头文件路径

    include_directories("path")

多级目录

多个目录时, 每个目录下面都要有CMakeLists.txt文件

1
2
3
4
5
6
7
8
9
./Demo
|
+--- main.cc
|
+--- math/
|
+--- MathFunctions.cc
|
+--- MathFunctions.h

对于这种情况: 将math下的代码生成静态链接库

1
2
3
aux_source_directory(. DIR_LIB_SRCS)
# 生成链接库
add_library (MathFunctions ${DIR_LIB_SRCS})

Demo文件夹下:

1
2
3
4
5
6
7
8
9
10
11
12
project(Demo)

aux_source_ddirectory(. DIR_SRC)

# 添加 math 子目录
add_subdirectory(math)

add_executable(Demo main.cc)


# 添加链接库
target_link_libraries(Demo MathFunctions)

这样即可多级目录构建

外部构建

使用cmake . 的是后总是在当前目录生成很多文件和文件夹, 目前来说这些除了Makefile都是没用的,看起来很闹心 。如果可以让生成的文件放到一个固定的目录就好了。

也就是官方推荐的外部构建(out-of-source), 最大的好处是不会再原来的目录下生成与工程无关的文件。

外部构建的方法很简单,一开始使用cmake .的时候这个.表示的是当前目录,那么如果在别的地方,时候cmake命令构建的时候只要给定一个正确的路径就可以了,例如在当前工程目录下创建一个build目录,进入build目录, 然后使用cmake ..即可构建。这样生成的文件就在当前目录下了。

自定义编译选项

后续用的话再更新, 现在刚开始还用不到。