一、Cmake简介
CMake是一种跨平台编译工具,CMake主要是编写CMakeLists.txt文件,然后通过cmake命令将CMakeLists.txt文件转化为make所需要的Makefile文件,最后用make命令编译源码生成可执行程序或者库文件。实际项目中的C/C++文件不计其数、文件放置的位置也不同,Makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。实现自动化的编译。
编译流程:编写CMakeLists.txt → cmake命令,获得Makefile文件 → make命令,生成可执行程序或库文件。
二、CMake链接使用库文件
以简单的例子来来看看CMake的语法,创建一个test项目,项目结构如下
├── test目录
│ ├── CMakeLists.txt
│ ├── include目录
│ │ ├── myprint.h
│ ├── src 目录
│ │ ├── myprint.cpp
│ ├── lib目录
│ ├── biuld目录
include目录放置头文件,src目录下放置的是.c/.cpp源文件,biuld目录是用来构建的项目,lib目录用来放置我们生成库文件。
假设我们要链接到lib目录下的库文件libmyprint.so,CMakeLists.txt文件内容这样写:
#指定 cmake 的最小版本CMAKE_MINIMUM_REQUIRED(VERSION 3.14)#指定项目名称,这里源文件是hello.cppPROJECT(HELLO)#将hello.cpp 赋值给SOURCE 变量SET(SOURCE ${PROJECT_SOURCE_DIR}/src/hello.cpp)#指定头文件目录INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)#指定链接库文件目录LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)#将hello.cpp生成可执行文件helloADD_EXECUTABLE(hello ${SOURCE})#指定hello 链接库myprintTARGET_LINK_LIBRARIES(hello myprint)
cd到项目biuld目录执行cmake ..命令,将会在biuld目录下生成Makefile文件,执行make命令,编译完后,将在biuld目录下生成可执行文件hello。执行./hello 运行程序。
注意:要将 cmake 配置到环境变量中去才可直接使用,否则需要使用绝对路径,.. 表示上一级目录,cmake 会在上一级目录下找到 CMakeLists.txt 文件并编译。
为什么要使用 build 文件夹?
一般我们采用 cmake 的 out-of-source 方式来构建(即生成的中间产物和源代码分离),这样做可以让生成的文件和源文件不会弄混,且目录结构看起来也会清晰明了,所以推荐使用这种方式。至于这个文件夹的命名并无限制,我们习惯命名为 build。
