CMake基础命令
# CMake常用命令
作为学习时的记录,附加了简单的分析。
# 构建makefile和编译、链接
一般来说,采用外部构建策略,即拆分源码和build临时文件。方法很简单,就是在工程汇总增加build文件夹,在这里面进行构建makefile的操作。
cd proj_name/build
1
然后生成makefile
cmake ..
1
此时就生成了对应的makefile文件,再进行编译和链接,此时可以执行
make
1
或者使用cmake的语法
cmake -build .
1
至此就生成了对应的二进制文件,然后执行即可。
# 版本号与工程名
# CMake版本号
cmake_minimum_required(VERSION 3.10)
1
该命令指明了运行该cmake程序需要的最小版本号,
# 工程及其版本号
project(MyProject VERSION 1.0)
1
这句话指明了:
- 工程的名称是MyProject
- 版本是1.0(可以省略)
# 设置C++版本
即选择构建、编译链接等过程中遵循的C++标准究竟是C++ 11还是C++20或其他版本。
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
1
2
2
# 定义变量
在上一小节中出现了关键字set,它的作用就是显示地定义一个变量,或者为变量赋值。
简化的语法是
set(VAR [VALUE])
1
后也即可以为定义VAR,并赋值为VALUE
# 源文件与对应的可执行文件
利用下面的命令
add_executable(hello main.c func.c)
1
这说明文件会生成一个名为hello的文件,它对应的源文件是main.c func.c等。
其中第一个是生成的文件名,后面则是源文件列表。
# 指明有源文件的子目录
比如某些情况下,当工程比较大时,整个工程的结构需要如下所示:
- MyProject
- doc - 存放文档
- src - 存放源码
- build - 存放构建的临时文件
- bin - 存放二进制文件
- README
- CMakeFiles.txt
上述的操作可以用下面的方法实现:
add_subdirectory(src bin)
1
这句话的意思是,
- src是一个子文件夹,它是存放源文件的文件夹。
- bin表示由该文件夹中的二进制文件存放位置为./bin/,注意是此时的相对路径。(也可以写成绝对路径)
# 构建静态库与动态库
一般用cpp写的模块都不是直接执行,而是作为某个静态库或动态库来加载。要生成这个动态库和静态库(而不只是一个可执行的二进制文件)需要对应的命令:
add_library(hello SHARED ${LIBHELLO_SRC})
1
- 生成的库名为hello
- 生成的库是动态(其中第二个变量可以是:SHARED、STATIC、MODULE)
- LIBHELLO_SRC指明了生成库的路径
为了生成静态库,则使用下面的命令:
add_library(hello STATIC ${LIBHELLO_SRC})
1
但是,一个问题是同时使用上述两个命令会失败一个,因为名字是相同的。一个比较简单的方法是使用不同的名字。
# 添加共享库
添加非标准的文件搜索路径(告诉编译器,通常用于头文件)
include_directories(/usr/include/hello)
1
添加非标准的共享库搜索路径(告诉链接器,用于共享库)
link_directories(directory1)
1
为执行目标link到共享库
target_link_libraries(target library1)
1
编辑 (opens new window)
上次更新: 2021/11/08, 14:32:39