最小CMakeLists

  1. cmake_minimum_required(VERSION 3.15) //指定CMAKE最小的版本号
  2. project(main) //设置项目的名称
  3. aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC) //将CMAKE文件夹下的文件都加到SRC里
  4. add_executable(${PROJECT_NAME} ${SRC}) //生成可执行文件

包含头文件

  1. include_directories(
  2. ${CMAKE_CURRENT_SOURCE_DIR}
  3. ${CMAKE_CURRENT_SOURCE_DIR}/dir
  4. )

指定编译包含的源文件

搜索CMAKE所在文件夹下的所有CPP文件

  1. aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SRC)

明确指定包含哪些文件

  1. add_library(demo demo.cpp test.cpp util.cpp)

查找指定的库文件

  1. find_package( OpenCV REQUIRED )

设置链接库搜索目录

  1. link_directories(
  2. ${CMAKE_CURRENT_BINARY_DIR}/libs
  3. )

设置目标需要链接的库

在 Windows 下,系统会根据链接库目录,搜索xxx.lib 文件,Linux 下会搜索 xxx.so 或者 xxx.a 文件,如果都存在会优先链接动态库(so 后缀)。

  1. target_link_libraries( # 目标库
  2. demo
  3. # 目标库需要链接的库
  4. # log-lib 是上面 find_library 指定的变量名
  5. ${log-lib}
  6. )

  1. target_link_libraries(
  2. ${PROJECT_NAME}
  3. libs
  4. )

指定链接库

  1. target_link_libraries(demo libface.a) # 链接libface.a
  2. target_link_libraries(demo libface.so) # 链接libface.so

指定全路径

  1. target_link_libraries(demo ${CMAKE_CURRENT_SOURCE_DIR}/libs/libface.a)
  2. target_link_libraries(demo ${CMAKE_CURRENT_SOURCE_DIR}/libs/libface.so)

链接多个库

  1. target_link_libraries(demo
  2. ${CMAKE_CURRENT_SOURCE_DIR}/libs/libface.a
  3. boost_system.a
  4. boost_thread
  5. pthread)

添加依赖

  1. add_dependencies(${PROJECT_NAME} dep_lib)

添加子文件夹

  1. add_subdirectory(dir_name)

打印消息

  1. message("show message")

编译生成

  1. 编译生成二进制bin文件

    1. add_executable(${PROJECT_NAME} ${SRC})
  2. 编译生成库文件 ```bash add_library(${PROJECT_NAME} SHARED # 编译生成动态库 .so ${ALL_SRC} )

add_library(${PROJECT_NAME} STATIC # 编译生成静态库 .a ${ALL_SRC} ) ```