CMakeLists.txt
PROJECT (Hello)
SET(SRC_LIST main.cpp)
MESSAGE(status "Binary dir: " ${PROJECT_BINARY_DIR})
ADD_EXECUTABLE(hello ${SRC_LIST})
-
PROJECT_BINARY_DIR
与PROJECT_SOURCE_DIR
是两个预定义变量 -
SET (SRC_LIST main.cpp)
定义变量以及其内部值 -
MESSAGE
向终端输出用户自定义信息,信息包括三种- SEND_ERROR:产生错误,生成过程被跳过
- STATUS:输出前缀为-的信息
- FATAL_ERROR:立即终止所有cmake过程
cmake指令
cmake -B build -G "Unix Makefiles"
- -B 表示要将构建中的过程文件都生成到指定文件内
- -G 表示指定构建系统
- 上述会在指定的build文件夹中生成包括Makefiles文件在内的众多文件
- 再执行make就可以生成目标文件了
cmake --build .
在当前文件夹下找到Makefiles文件来执行make后的效果是一样的cmake --build ./build --config Release --target hello
变量set
写法:set(变量名 变量值)
- 特殊变量
- 指定使用C++标准:
- 第一种方法,指定C++编译版本
set(CMAKE_CXX_STANDARD 11/14/17/20)
,注意其中的数字只能写一个不能并写- 相当于在执行编译时使用参数
-std=c++11
- 指定C编译版本:
set(CMAKE_C_STANDARD 11)
- 相当于在执行编译时使用参数
- 第二种方法:在使用cmake命令时指定,例如
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=11/14/17
-D
代表指定一个宏
- 第一种方法,指定C++编译版本
- 可执行程序输出路径
set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin)
,如果路径不存在会自动创建- 在此之前设置
set(HOME /home/robin/build)
- 建议这个路径使用绝对路径
- 在此之前设置
- 指定使用C++标准:
CMake构建大型c++项目
# first-cmake
# 指定编译版本
cmake .. -DCMAKE_CXX_STANDARD=11
- 执行cmake:
- cmake -S . -B build
- -S是指定查找CMakelist.txt文件路径,-B是指令生成所有文件到指定目录build下,如果没有创建build文件夹,会自动创建
- cmake --build build(好像不好用)
- 不用进入build文件夹而开始编译
- cmake -S . -B build