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_minimum_required (VERSION 2.8)
project (test)
# 将本文件夹下的源文件添加到变量 SRC_LIST 中
aux_source_directory(. SRC_LIST)
# 使用变量 SRC_LIST 中的源文件
add_executable(main ${SRC_LIST})
3 多个不同目录下多个C文件
假设我有一个工程文件夹test,其组织结构如下:
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,其组织结构如下:
大型的工程文件通常不只有一个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_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文件夹