由于学习OpenCV的时候,官方的教程使用了CMake,学习CMake并记录笔记如下:
本笔记是根据官网的7 steps 教程修改补充得到的,但是官网的描述并不清楚,所以添加一些注释并补充一些CMake的语法:
官网的语法文档:https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#id9
官网的7 steps教学:https://cmake.org/cmake-tutorial/
A Basic Starting Point (Step1)
这个简单的例子将构建一个最小的使用cmake编译的工程
这个例子里只有一个待编译的文件,main.cpp
#include<iostream>
using namespace std;
int main(){
cout<<"hello world"<<endl;
return 0;
}
然后编写最简单的CMakeLists.txt文件
cmake_minimum_required(VERSION 2.6)
project (tutorial) # set project's name as tutorial
add_executable (tutorial.exe main.cpp)
#[[
set the executable output file tutorial.exe
set the source file main.cpp
]]
解释:
- CMake语法中,单行注释使用# comments,多行注释使用#[[ comments ]]
- 这个最简单的CMakeLists.txt只有三行
- 第一行cmake_minimum_required(VERSION 2.6)表示这个工程编译最低CMake版本2.6
- 第二行project (tutorial) 表示给这个工程命名为tutorial
- 第三行add_executable(tutorial.exe main.cpp)表示生成的可执行文件命名为tutorial.exe,使用源文件main.cpp
完成了以上两步,就完成了项目源代码和CMakeLists.txt的文件配置
查看此时的目录:
chenhanxuan@idiospace:~/Documents/OpenCV_Notes/CMake/samples/specimen1/n1$ ls
CMakeLists.txt main.cpp
接下来只需要两个命令即可编译并输出可执行文件
cmake .
这一步是完成makefile的生成以及CMake的缓存文件的生成(缓存文件的作用在后面的教程中会提到)
生成的文件保存在当前的目录下
输入指令后会出现:
chenhanxuan@idiospace:~/Documents/OpenCV_Notes/CMake/samples/specimen1/n1$ cmake .
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/chenhanxuan/Documents/OpenCV_Notes/CMake/samples/specimen1/n1
然后查看此时的目录:
chenhanxuan@idiospace:~/Documents/OpenCV_Notes/CMake/samples/specimen1/n1$ ls
CMakeCache.txt cmake_install.cmake main.cpp
CMakeFiles CMakeLists.txt Makefile
可以看到多出来了4个文件
然后输入指令
make
chenhanxuan@idiospace:~/Documents/OpenCV_Notes/CMake/samples/specimen1/n1$ make
Scanning dependencies of target tutorial.exe
[ 50%] Building CXX object CMakeFiles/tutorial.exe.dir/main.cpp.o
[100%] Linking CXX executable tutorial.exe
[100%] Built target tutorial.exe
可以看到生成最终可执行文件tutorial.exe的执行过程
查看此时的文件目录:
chenhanxuan@idiospace:~/Documents/OpenCV_Notes/CMake/samples/specimen1/n1$ ls
CMakeCache.txt cmake_install.cmake main.cpp tutorial.exe
CMakeFiles CMakeLists.txt Makefile
运行最终的目标文件:
chenhanxuan@idiospace:~/Documents/OpenCV_Notes/CMake/samples/specimen1/n1$ ./tutorial.exe
hello world
step1到这里结束了,接下来会讨论添加头文件和自己的函数库的配置和CMakeList.txt的写法