cmake
是常用的跨平台编译工具。作为一个"git clone + cmake "
工程师,我的工作大概是这么一个流程:
git clone xxx.git
cd xxx
mkdir build && cd build
cmake ..
make -j8
sudo make install
cmake
的作用主要是将CMakeLists.txt
转化为makefile
,然后通过make
指令编译,这里我们只需要编写CMakeLists.txt
而不用管编译、链接的复杂过程。
下面简单介绍一下CMakeLists.txt
的组成:
cmake_minimum_required(VERSION 3.0)
cmake
的最小版本要求
project(orbvocabulary)
- 项目工程名,在ROS中为package名
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 -O3")
- 设置编译参数,添加c++11支持,release优化等级设为最高
include_directories("include/")
- 添加头文件路径
# OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
- 查找依赖包
- REQUIRED 其含义是表示如果包没有找到的话,cmake的过程会终止
# Set header files
set(
HEADER_FILES
include/file_io.h
include/ORBVocabulary.h)
# Set source files
set(
SOURCE_FILES
src/main.cpp
src/file_io.cpp)
- 设置源文件和头文件
# executable files
add_executable(main ${SOURCE_FILES} ${HEADER_FILES})
- 生成可执行文件
# executable files
add_executable(main ${SOURCE_FILES} ${HEADER_FILES})
- 添加链接依赖库
完整文件:
cmake_minimum_required(VERSION 3.0)
project(test)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 -O3")
include_directories("include/")
# OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
# Set header files
set(
HEADER_FILES
include/file_io.h
)
# Set source files
set(
SOURCE_FILES
src/main.cpp
)
# executable files
add_executable(main ${SOURCE_FILES} ${HEADER_FILES})
# target libraries
target_link_libraries(main ${OpenCV_LIBS})