cmake的使用
cmake是什么?
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。 只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件, 而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件, 这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
一些cmake的基本指令
https://cmake.org/cmake/help/v3.9/manual/cmake-commands.7.html
cmake的指令分为下面几种
- Scripting Commands(脚本指令)
- Project Commands(项目指令)
- CTest Commands(测试指令)
脚本指令
| 名称 | 解释 |
|---|---|
| break | 退出指令 |
| cmake_host_system_information | |
| cmake_minimum_required | 使用的cmake的最低版本号 |
| cmake_parse_arguments | |
| cmake_policy | |
| configure_file | |
| continue | |
| elseif | |
| else | |
| endforeach | |
| endfunction | |
| endif | |
| endmacro | |
| endwhile | |
| execute_process | |
| file | |
| find_file | |
| find_library | |
| find_package | |
| find_path | |
| find_program | |
| foreach | |
| function | |
| get_cmake_property | |
| get_directory_property | |
| get_filename_component | |
| get_property | |
| if | |
| include | |
| list | |
| macro | |
| mark_as_advanced | |
| math | |
| message | |
| option | |
| return | |
| separate_arguments | |
| set_directory_properties | |
| set_property | |
| set | |
| site_name | |
| string | |
| unset | |
| variable_watch | |
| while |
项目指令
| 名称 | 解释 |
|---|---|
| cmake_minimum_required | 使用的cmake的最低版本号 |
| project | 项目名称 |
| add_executable | 指定生成目标 |
| aux_source_directory | 查找目录下的所有源文件,并将名称保存到 DIR_SRCS 变量 |
| add_library | 指定生成动态链接库 |
| add_subdirectory | 添加子目录,子目录里面包含另外一个cmake项目 :add_subdirectory([子目录名称]) |
| target_link_libraries | 添加动态链接库 : target_link_libraries([当前项目名称] [动态链接库项目名称]) |
| configure_file | 添加配置文件,常量可以在c中使用 |
| options | cmake的配置文件 |
常见内置变量
变量的引用方式是使用“${}”,在IF中,不需要使用这种方式,直接使用变量名即可
定义变量 : set(NAME xxxx) 使用变量 : ${NAME}
一些常用的变量
| 名称 | 解释 |
|---|---|
| CMAKE_SOURCE_DIR PROJECT_SOURCE_DIR PROJECT_SOURCE_DIR | 这三个变量内容一致,都指的是工程的顶级目录。 |
| CMAKE_CURRENT_BINARY_DIR | 外部编译时,指的是target目录,内部编译时,指的是顶级目录 |
| CMAKE_CURRENT_SOURCE_DIR | CMakeList.txt所在的目录 |
| CMAKE_CURRENT_LIST_DIR | CMakeList.txt的完整路径 |
| CMAKE_CURRENT_LIST_LINE | 当前所在的行 |
| CMAKE_MODULE_PATH | 如果工程复杂,可能需要编写一些cmake模块,这里通过SET指定这个变量 |
| LIBRARY_OUTPUT_DIR BINARY_OUTPUT_DIR | 库和可执行的最终存放目录 |
| PROJECT_NAME | 项目名称 |