CMake简单指令:CMake学习笔记(一)

CMake简单指令

  • 1 只有main.c
  • 2 多个C文件在同一文件夹下
  • 3 多个不同目录下多个C文件
  • 4 正式的组织结构(build文件夹正确使用)
    • 目录结构与CMakeList编写
    • 将生成的对象文件放入build文件夹
  • 带静态、动态库的组织结构
  • cmake语法整理
  • 路径的注意事项

1 只有main.c

test目录下只有一个main.c文件,只需在同一个文件夹下新建一个CMakeList.txt文件,内容如下:

# 需要的cmake最低版本是 2.8
cmake_minimum_required(VERSION 2.8)

# 工程名称是 test
project(test)

# 生成的二进制文件名为 main
# 需要的源文件为 main.c
add_executable(main main.c)

之后在test文夹下执行

cmake .
make

2 多个C文件在同一文件夹下

假设有多个源文件在test文件夹下,文件结构如下:
CMake简单指令:CMake学习笔记(一)_第1张图片

cmake_minimum_required (VERSION 2.8)

project (test)

# 将本文件夹下的源文件添加到变量 SRC_LIST 中
aux_source_directory(. SRC_LIST)

# 使用变量 SRC_LIST 中的源文件
add_executable(main ${SRC_LIST})

3 多个不同目录下多个C文件

假设我有一个工程文件夹test,其组织结构如下:
CMake简单指令:CMake学习笔记(一)_第2张图片
CMakeList的内容如下:

cmake_minimum_required(VERSION 2.8)

project(test)

# 添加工程头文件的搜索路径(多个路径空格分开)
include_directories(func_file1 func_file2)

# 将func_file1 文件夹下的源文件添加到变量 SRC_LIST1 中
# 将func_file2 文件夹下的源文件添加到变量 SRC_LIST2 中
aux_source_directory(func_file1 SRC_LIST1)
aux_source_directory(func_file2 SRC_LIST2)

add_executable(main main.c ${SRC_LIST1} ${SRC_LIST2})

在test文件夹下执行

cmake .
make

4 正式的组织结构(build文件夹正确使用)

目录结构与CMakeList编写

假设我有一个工程文件夹test,其组织结构如下:
CMake简单指令:CMake学习笔记(一)_第3张图片
大型的工程文件通常不只有一个CMakeList.txt
第一个 CMakeList.txt 中内容如下:(build下面那个)

# 规定需要的cmake最低版本是 2.8
cmake_minimum_required(VERSION 2.8)
# 工程名称是 test
project(test)
# 向工程添加存放源文件的子目录 src
# 子文件夹可以有CMakeLists.txt
add_subdirectory(src)

第二个 CMakeList.txt 中内容如下:(src里面那个)

# 本目录下源文件名称都存储在 SRC_LIST 变量中
aux_source_directory(. SRC_LIST)

# 添加工程头文件的搜索路径(多个路径空格分开)
include_directories(../include)

# 生成可执行文件的名称叫 main
# 使用存放在 SRC_LIST 变量中的源文件
add_executable(main ${SRC_LIST})

# 设置输出二进制文件的存放位置为 ${PROJECT_SOURCE_DIR}/bin
# ${PROJECT_SOURCE_DIR} 表示根目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

将生成的对象文件放入build文件夹

上面几次执行 cmake . 操作后,源文件目录下多出了好多额外的文件及文件夹,污染了源文件(影响源文件的可读性),下面这种方法可以使生成的对象存放在build文件夹中:

# 进入build文件夹
cd build

# 执行cmake
cmake ..

# 执行make
make

查看一下,生成的文件是不是都在build文件夹中了,因为设置了二进制的输出文件目录,输出的文件也在bin目录之中了。

来欣赏下cmake + make后的文件目录(展开到三级目录)
CMake简单指令:CMake学习笔记(一)_第4张图片

带静态、动态库的组织结构

(后续补上)

cmake语法整理

  • 设置最小版本
    • cmake_minimum_required (VERSION 2.8)
  • 设置工程名称
    • project (test)
  • 添加工程子文件夹(多个CMakeLists)
    • add_subdirectory (src)
  • 添加工程头文件查找目录
    • include_directories (…/include)
  • 将目录source1中的源文件添加到 SRC_LIST1 变量中
    • aux_source_directory (source1 SRC_LIST1)
  • 设置生成的可执行文件名称
    • add_executable (main ${SRC_LIST1})
  • 设置工程输出二进制文件路径
    • set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

路径的注意事项

CMakeList.txt中的本文件夹就是其文件所在的文件夹
" . "			代表本文件夹
" abc "			代表本文件夹下的abc文件夹
" ../abc "		代表和本文件夹同级的abc文件夹

"${PROJECT_SOURCE_DIR}/abc"		代表根文件夹下的abc文件夹

参考链接

你可能感兴趣的:(cmake)