CMake基本使用总结

CMake

文件名格式和用法

  • cmake文件的文件名必须是CMakeLists.txt,文件名大小写相关,如果一个工工程中有多个目录,每个目录中都必须有一个CMakeLists.txt文件

语法

示例代码一

编写CMakeLists.txt

cmake_minimum_required(version 2.8) # 版本号
project(HELLO)                      # 工程名
set(CMAKE_BUILD_TYPE "Debug")       # debug调试
set(SRC_LIST main.c)                # 使用SRC_LIST存储源文件,可以有多个
add_executable(hello ${SRC_LIST})  
set (SRC_LIST                       # 使用set给变量存储多个源文件
			./main.c
			./text.cpp)
  • cmake_minimum_required(version 2.8) ,要求必须写出cmake的最低版本号
  • PROJECT(工程名称 [支持语言]),支持语言是可选参数,如果不写默认是所有需要都支持
  • set(CMAKE_BUILD_TYPE “Debug”),设置debug版本,添加这一行就可以进行设断点调试
  • SET(变量名 源文件),可以有一个或多个源文件
  • ADD_EXETABLE(filename ) f i l e n a m e , S E T A D D S R C L I S T A D D E X E C U T A B L E ( h e l l o m a i n . c ) 使 {变量名}),filename是定义了这个工程生成的可执行文件的文件名 ,如果SET中只有一个源文件,可以在ADD中的SRC_LIST可以写成源码文件名ADD_EXECUTABLE(hello main.c),另外需要使用 {变量名}方式取值,在IF( if )控制语句中,也可以直接使用变量名

运行cmake文件

  • 在CMakeLists.txt所在目录下运行cmake.(.表示当前目录),系统自动生成CMakeFiles,CMakeCache.txt,cmake_install.cmake等文件,最主要的是生成Makefile,然后在当前目录中输入make命令,我们需要的可执行的目标文件hello就构建完成,然后./hello得到运行结果

运行结果

执行cmake 命令,输出如下图:
在这里插入图片描述
查看当前目录。会看到cmake生成的中间文件,以及最重要的Makefile文件

在这里插入图片描述
然后make开始编译,生成可执行文件,查看当前目录会看到可执行文件hello

在这里插入图片描述

示例代码二

当需要编译的源文件过多,如果都添加到set中会比较麻烦,cmake使用一种更简便的方式,使用aux_source_directory(dir var)来定义源文件列表

编写CMakeLists.txt

cmake_minimum_required(version 2.8) # 必须有的版本号
project(HELLO)                      # 工程名
set(CMAKE_BUILD_TYPE "Debug")       # 添加debug版本
aux_source_directory(.SRC_LIST)     # 定义变量,存储当前目录中所有源文件
add_executable(main ${SRC_LIST})  

其他和示例一都是一样的,但是使用aux_source_directory会存在一些弊端,它会将当前目录中所有源文件都加进来,也许有一些源文件我们并不需要

示例三:一个完整的工程构建

一个完整的工程必须有的目录

-bin         	存放最终的可执行文件
-build       	存放编译中间文件
-lib            生成的.so库
-test           测试用例
-thirdparty     使用的三方库
-include     	头文件
	--text.h
	--myadd.h
-src         	源代码文件
	--text.cpp
	--myadd.cpp
-CMakeLists.txt

编写最外层的CMakeLists.txt

cmake_minimum_required(version 2.8) # 必须有的版本号
project(project)                      # 工程名

add_subdirectory(test) # 进入到test子目录的Cmake文件
add_subdirectory(src)  # 进入到src子目录的Cmake文件
add_subdirectory(thiedparty) # 进入到thirdparty子目录的人Cmake文件

src目录的CMakeLists.txt

set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib}) # 指定生成的库存放的位置
add_library(sum SHARED sum.cpp) # 指定生成库的源文件,SHARED是动态库,不加SHARED就是静态库

test目录的CMakeLists.txt

set(EXECUTABLE_OUTPT_PATH ${PROJECT_SOURCE_DIR}/bin) # 将编译的可执行文件存放工程根目录下的bin下
include_directories(${PROJECT_SOURCE_DIR}/include) # 头文件的搜索路径
link_direxctories(${PROJECT_SOURCE_DIR}/lib) # 库文件搜索路径
add_executable(main main.cpp) # 指定编译的文件以及生成的可执行文件名
target_link_libraries(main pthread) # 添加执行文件需要依赖的库

编译命令和上面的一样

CMake常用的预定义命令
PROJECT_NAME  # 通过project()指定项目名称
PROJECT_SOURCE_DIR # 工程根目录
PROJECT_BINARY_DIR # 执行cmake命令的目录
EXESUTABLE_OUTPUT_PATH # 二进制可执行文件的输出位置
LIBRARY_OUTPUT_PATH # 库文件输出路径
附上自己写过项目的Cmake文件,供大家参考

项目根目录以及根目录的cmake文件
在这里插入图片描述在这里插入图片描述
src目录以及Cmake文件

在这里插入图片描述在这里插入图片描述

test目录以及Cmake文件
在这里插入图片描述在这里插入图片描述

发布了9 篇原创文章 · 获赞 3 · 访问量 205

猜你喜欢

转载自blog.csdn.net/weixin_43604792/article/details/103971337