一、CMake概述
CMake是一个跨平台的项目构建工具。编写完CMakeLists.txt(注意文件名称是固定的)后,执行cmake命令,生成Makefile文件。当然你也可以手动去编写Makefile文件,但是编写的工具量比较大,而且依赖关系也比较多,比较容易出错。
从项目源码到可执行文件的流程图:
项目的一般目录结构:
单独新建一个空目录 build
用来保存cmake命令后的中间文件,不会把原来的目录结构搞混乱,而且看起来更整洁。
二、CMakeLists.txt
- CMakeLists.txt语法
一些内置预定义变量以及含义:
预定义变量 | 含义 |
---|---|
PROJECT_SOURCE_DIR | 工程的根目录 |
PROJECT_NAME | 返回通过project命令定义的项目名 |
PROJECT_BINARY_DIR | 运行cmake命令的目录,通常是在项目下创建build目录,并执行命令 |
CMAKE_CURRENT_SOURCE_DIR | 当前处理CMakeLists.txt所在目录 |
CMAKE_CURRENT_BINARY_DIR | target编译目录(即目标文件输出目录) |
CMAKE_CURRENT_LIST_DIR | CMakeLists.txt的目录 |
CMAKE_CURRENT_LIST_LINE | 当前所在行(即该变量执行时的所在行) |
EXECUTABLE_OUTPUT_PATH | 重新定义目标二进制可执行文件的存放位置,需要用户去set |
LIBRARY_OUTPUT_PATH | 重新定义目标链接库文件的存放位置,需要用户去set |
通过一个具体的例子,验证表格中的内置变量是否正确:
分析上述结果,变量 EXECUTABLE_OUTPUT_PATH
和 LIBRARY_OUTPUT_PATH
为空,内置无效。
- CMakeLists.txt模板:
# 指定cmake版本
cmake_minimun_required(VERSION x.x)
# 指定项目名称
project(项目名称xxxx)
# 添加预处理定义,该功能已被其他命令替换(可选)
add_definitions(编译选项)
# 为源文件的添加编译选项(可选)
add_compile_options(选项1 选项2 选项...)
# 指定头文件目录,若存在多个用空格隔开
include_directories(目录1 目录2 目录...)
# 搜索指定目录下所有源文件,可以将所有源文件赋值给一个变量
# 如果不想在add_executable内一个一个写源文件的话,aux_source_directory就很有用
aux_source_directory(目录 变量)
# 设置变量,变量名一般全大写
set(变量 文件名or路径or其他)
# 指定源文件生成库文件(默认生成静态库)。可将static替换为shared,则生成动态库
add_library(库文件名 static 源文件1 源文件2 源文件...)
# 指定库文件目录
link_directories(目录)
# 指定的源文件来生成目标可执行文件
add_executable(目标可执行文件名 源文件)
# 设置链接库,即为目标可执行文件添加需要的库文件
target_link_libraries(目标可执行文件名 库文件名1 库文件名2 库文件名...)
# 输出测试,打印测试字符串,一般用于console log(可选)
message(字符串1 字符串2或变量 字符串...)
# 指定安装目录,一般需要先指定按照目标前缀,例如:/usr,执行make install后,可执行文件安装到:/usr/bin目录下
set(CMAKE_INSTALL_PREFIX /usr)
install(TARGETS ${PROJECT_NAME} DESTINATION bin)
# 查找目标依赖包
find_package()
二、参考地址
Cmake知识----编写CMakeLists.txt文件编译C/C++程序
CMakeLists.txt编写常用命令 - 星星,风,阳光 - 博客园 (cnblogs.com)
标签:可执行文件,CMakeLists,CMake,变量,源文件,txt,目录 From: https://www.cnblogs.com/caojun97/p/18122460