cmake_minimum_required(VERSION 3.18.1)
声明使用的最低版本
project("myName")
指定当前工程名称
set(src_list test1.cpp test2.cpp test3.cpp)
用来显示的定义变量,将test.cpp等多个源文件用空格隔开赋值给src_list
message(status "这里是输出信息")
使用message向屏幕输出信息,status表示输出前添加“--”
add_library(myTest myTest.cpp)
生成静态库
add_library(myTest shared myTest.cpp)
生成动态库.so
add_library(myTest shared src/test1.cpp src/test2.cpp)
把多个源文件生成一个库,多个cpp文件用空格隔开
find_package(OpenCV REQUIRED QUIET)
用来查找依赖包,把一整个依赖包的头文件包含路径、库路径、库名字、版本号都获取到,可能会失败
OpenCV要查找的包名
REQUIRED 当未找到满足条件的包(例如版本号不匹配,或指定组件未找到等),会终止CMake
的执行过程,并输出一条错误信息。如果未指定该选项,即使未找到满足条件的包,CMake
的执行过程也会继续
QUIET 禁止输出信息,正常情况当找到包时,CMake
会打印一些信息,指定该选项时会禁止掉这些打印。例外是当同时指定QUIET
时,如果找不到包,仍然会输出错误信息并终止执行过程
COMPONENTS 指定要查找的组件。通常一个包可能包含多个组件(可以理解为多个库,例如把C++的std看成一个包的概念,那么vector就是std下的其中一个组件),我们的工程可能会依赖包下的具体某个组件,因此可以通过这个选项来检测这些组件是否存在。通常的约定是,该选项后的组件应该都找到时才认为包找到,否则认为未找到满足条件的包。这个约束会依赖包的.cmake
来实现,通过find_package
命令传入的COMPONENTS
可以通过
这个变量来获得
OPTION_COMPONENTS与上面的区别是不要求组件必须存在,不影响Cmake的执行
_FOUND用来表示包是否找到,true表示找到,false表示未找到
find_dependency(MYDEP REQUIRED)
依赖其他库,和find_library用法相同
catkin_package()
给下游(使用本包的其他包)使用,也就是向其他包导出依赖,这些依赖可能是本包给其他包提供的公共头文件、库,或者是本包依赖的其他包
有五种方式
DEPENDS和CATKIN_DEPENDS用来告诉catkin需要将你程序包的哪些依赖项,传递给使用find_package(...)查找你的程序包的程序包
INCLUDE_DIRS 导出包的路径
LIBRARIES 导出项目中的库
CATKIN_DEPENDS 该项目依赖的其他catkin项目
DEPENDS 该项目依赖的非catkin Cmake项目
inlcude_directories()
向工程添加多个特定的头文件搜索路径
link_directories()
向工程添加多个特定的库文件搜索路径
add_executable(main main.cpp main1.cpp main2.cpp)
将cpp文件生成可执行文件main
target_link_libraries(main test.so user.so)
为可执行文件main添加需要链接的库
include()
用来载入并运行来自于文件或模块的 CMake 代码