2.CMAKE LEARNING
2
2.1
继续使用上一章节的
├── CMakeLists.txt
└── main.c
新建文件夹将上述两文件移入,在该目录下打开终端
mkdir src #新建源文件夹
mv main.c src #main.c移入src
cd src #打开src
vim CMakeLists.txt #vim打开文件(目录下没有就创建一个)
当前目录结构为
├── CMakeLists.txt
└── src
├── CMakeLists.txt
└── main.c
#需要为任何子目录建立一个 CMakeLists.txt
src目录下CMakeLists.txt写入
# 从main.c生成可执行文件BMI
ADD_EXECUTABLE(BMI main.c)
主目录(src上级目录)CMakeLists.txt写入
# PROJECT指定工程名称,也可指定编程语言
PROJECT (HELLO)
# 指定当前工程添加存放源文件子目录src,指定中间二进制和目标二进制的存放目录(bin不写默认为文件夹名称)
ADD_SUBDIRECTORY(src bin)
接下来进行编译
mkdir build #新建build文件夹保存编译文件
cd build
cmake .. cmake上一级目录
make
cmake 可能会给一个警告
CMake Warning (dev) in CMakeLists.txt:
No cmake_minimum_required command is present. A line of code such as
cmake_minimum_required(VERSION 3.16)
should be added at the top of the file. The version specified may be lower
if you wish to support older CMake versions for this project. For more
information run "cmake --help-policy CMP0000".
This warning is for project developers. Use -Wno-dev to suppress it.
这里说没有要求cmake版本信息,我们把
cmake_minimum_required(VERSION 3.16)
加到主目录下的CMakeLists.txt即可。
编译完成的目录结构为
├── build
│ ├── bin
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ └── Makefile
├── CMakeLists.txt
└── src
├── CMakeLists.txt
└── main.c
build/bin文件夹即为
# 指定当前工程添加存放源文件子目录src,指定中间二进制和目标二进制的存放目录
ADD_SUBDIRECTORY(src bin)
指定src源文件夹编译生成文件存储位置,可以与上一节编译目录对比
# 第一篇编译完成的目录结构
├── build
│ ├── BMI
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ └── Makefile
├── CMakeLists.txt
└── main.c
# 本篇编译完成的目录结构
├── build
│ ├── bin
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ └── Makefile
├── CMakeLists.txt
└── src
├── CMakeLists.txt
└── main.c
可以看出src文件夹的编译结果都存入build/bin文件夹内。
2.2 指定目标二进制位置(可执行文件)
在src/CMakeLists.txt加入
# 指定目标二进制目录,PROJECT_BINARY_DIR为执行cmake目录,即build目录。该指令目的是把可执行文件放入build/out目录下
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/out)
重复2.1步骤,此时目录结构为
├── build
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── Makefile
│ ├── out
│ │ └── BMI
│ └── src
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ └── Makefile
├── CMakeLists.txt
└── src
├── CMakeLists.txt
└── main.c
可以看出BM可执行文件保存在build/out目录下。

浙公网安备 33010602011771号