cmake学习笔记

记录一些cmake语句的用法~
cmake_minimum_required( VERSION 2.8 ): 要求cmake的最低版本。
project( myProj ): 设置项目名称为myProj。
set(param value): 将变量param的值设置为value,在多处可以被用到,例如:

  • set( CMAKE_CXX_FLAGS "-std=c++11" ),设置变量CMAKE_CXX_FLAGS的取值,这里是为了引入c++11的标准。
  • set( CMAKE_CXX_COMPILER "g++" ),设置编译器为g++。
  • set( CMAKE_BUILD_TYPE "Release" ),设置运行模式为release,运行速度快。
  • set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin ),设置存放可执行文件的地址
  • set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib ),设置存放库文件的地址

find_package( OpenCV REQUIRED ): 找到OpenCV.cmake文件,里面记录了后续需要使用到的变量,如OpenCV_INCLUDE_DIRS,OpenCV_LIBS,通常会是一些重要到目录地址。
include_directories( ${OpenCV_INCLUDE_DIRS} ): 是用来提供找头文件路径的,想要#include "opencv2/opencv.hpp",得写成#include "/usr/local/include/opencv2/opencv.hpp”,因为这个头文件就是包含在这里的,这个时候就用到include_directories了,将"/usr/local/include/"给省略了下来。另外,$用于取值。
add_executable( myExecu main.cpp ): 添加生成可执行文件,第一个参数是目标文件的名称,第二个参数是代码文件。
target_link_libraries( myExecu ${OpenCV_LIBS} ): 为可执行文件链接到Opencv的二进制可执行文件上。库到结构通常会是可执行的二进制文件+头文件的格式。
add_library(libName STATIC/SHARED src1.cpp src2.cpp src3.cpp ...)

  • add_library(myStatic STATIC util.cpp)
    添加静态库。第一个参数是库文件的名字,该库文件会根据命令里列出的源文件来创建,会在前面自动添加上lib前缀。最后会生成libmyStatic.so。静态库在编译阶段被被打包进目标文件当中,运行快但是浪费空间资源。
  • add_library(myActive SHARED util.cpp)**,添加共享库。最后会生成libmyActive.a。动态库在程序运行期间被加载,可以实现进程之间到资源共享,节省空间。
    aux_source_directory(. SRC_LIST),找到目标目录(这里是.)下面到所有cpp文件,并存入到SRC_LIST变量当中。后面可以add_library(SRC_LIST)完成一键添加。
    list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules )
    set是定义一个变量,而list是定义一个array,这里为CMAKE_MODULE_PATH变量追加${PROJECT_SOURCE_DIR}/cmake_modules目录。将APPEND换成REMOVE则是删除。

ROS特有:
catkin_package(CATKIN_DEPENDS roscpp): 依赖于此功能包的 功能包 所需要添加的依赖。简单说,find_package是给自己设置所需的依赖,而catkin_make是在给别人设置。

cmake内有一些常用到变量,记录在这~
CMAKE_SOURCE_DIR,指定了CMakeLists.txt所在的目录。
PROJECT_SOURCE_DIR,构建工程的全路径。
PROJECT_NAME,项目名称。
CMAKE_MODULE_PATH, CMake文档中记载到是directories specifying a search path for CMake modules to be loaded by the the include() or find_package() commands before checking the default modules that come with CMake. 主要是为了find_package添加一些搜寻目录,这些目录中含有一些.cmake文件,存放啦一些重要的库文件变量。
EXECUTABLE_OUTPUT_PATH, 存放可执行文件的目录,现在已经被 RUNTIME_OUTPUT_DIRECTORY变量取代。
LIBRARY_OUTPUT_PATH,存放库文件到目录,现在已经被LIBRARY_OUTPUT_DIRECTORY所取代。

posted @ 2020-10-08 12:39  HermioneGranger  阅读(312)  评论(0)    收藏  举报