常用CMake指令
常用CMake指令
笔记来自《视觉惯性SLAM:理论与源码解析》
指定要求最小的CMake版本,如果版本小于该要求,则程序终止
cmake minimum required(VERSION 2.8)
设置当前项目名称为test
project(test)
指定头文件的搜索路径,方便编译器查找相应头文件
例子:文件main.cpp中使用到路径/usr/local/include/opencv/cv.h中的这个文件
那么需要在cMakeLists.txt中添加include_directories(“/usr/local/include”)
#这样使用时在main.cpp开头写上#include"opencv/cv.h",编译器即可自动搜索到该头文件
include_directories
设置用变量代替值
例子:set(SRC_LST main.cpp other.cpp)表示定义SRC_LST代替后面的两个.cpp文件
set(variable value)
用指定的源文件为工程添加可执行文件
上述例子表示,用main.cpp生成一个文件名为hello的可执行文件
add_executable(hello main.cpp)
将指定的源文件生成链接库文件。STATIC为静态链接库,SHARED为共享链接库
add_library(libname STATIC/SHARED sources)
为库或二进制可执行文件添加库链接
target_link_libraries(target libraryl library2...)
向当前工程中添加文件的子目录,目录可以是绝对路径或相对路径
add_subdirectory(source_dir)
在目录下查找所有源文件
aux_source_directory(dir varname)
打印输出信息
#mode包括FATAL_ERROR、WARNING、STATUS、DEBUG等,双引号内是打印的内容
message(mode "messagetext")
列表操作(读、搜索、修改、排序)
追加例子:LIST(APPEND CMAKE MODULE PATH S(PROJECT SOURCE DIR}/cmake moduleS)
list
判断语句,使用方法和C语言一致
if,elseif,endif
循环指令,使用方法类似c语言中的for循环
foreach,endforeach
搜索第三方库
version:指定查找库的版本号。
EXACT:要求该版本号必须精确匹配。
QUIET:禁止显示没有找到时的警告信息
REQUIRED选项表示如果包没有找到,则CMake的过程会终止,并输出警告信息
当findpackage找到一个库时,以下变量会自动初始化,
NAME表示库的名称:
<NAME>_FOUND:显示是否找到库的标记
<NAME>_INCLUDEDIRS或<NAME>_INCLUDES:头文件路径
<NAME>_LIBRARIES或<NAME>_LIBS:库文件
find_package(package Name version EXACT/QUIET/REQUIRED)
如果我们当前待编译的工程需要使用第三方库,需要知道3件事
(1)第三方库的名称
(2)去哪里找库的头文件(头文件所在的目录路径)
(3)去哪里找库文件(库的二进制文件(如 .a、.so、.lib、.dll 等)所在的目录路径)
不使用find_package指令的情况下需要手动指定路径
#下面的yourpath1需要替换为Pangolin头文件在当前计算机上的路径
include directiories(yourpathl/Pangolin)
#下面的yourpath2需要替换为生成的库文件在当前计算机上的路径
targetlink libraries(mydemo yourpath2/Pangolin.so)
使用find_package指令的情况下自动指定路径
#查找计算机中已经安装的Pangolin库
find_package(Pangolin REQUIRED)
#自动将找到的Pangolin库中头文件的路径添加到工程中
include_directories($(Pangolin_INCLUDE_DIRS))
#自动将找到的Pangolin库文件链接到工程中
target_link_libraries(mydemo $(Pangolin LIBRARIES))
