一、官方网站:
CMakehttps://cmake.org/
二、介绍内容:
CMake is an open-source, cross-platform family of tools designed to build, test and package software. CMake is used to control the software compilation process using simple platform and compiler independent configuration files, and generate native makefiles and workspaces that can be used in the compiler environment of your choice. The suite of CMake tools were created by Kitware in response to the need for a powerful, cross-platform build environment for open-source projects such as ITK and VTK.CMake is part of Kitware’s collection of commercially supported open-source platforms for software development.
CMake是一个开源、跨平台的工具系列,旨在构建、测试和打包软件。CMake用于使用简单的平台和编译器独立的配置文件控制软件编译过程,并生成可在您选择的编译器环境中使用的本机makefile和工作区。CMake工具套件是由Kitware创建的,以响应对一个强大的、跨平台的开源项目(如ITK和VTK)构建环境的需求。CMake是Kitware一系列商业支持的开源软件开发平台的一部分。
直白解释:CMAKE通过统一的接口函数,生成各平台编译工具认识的makefile文件,取代了我们编写makefile的麻烦,减轻了我们程序猿的工作量。
三、例程:
cmake_minimum_required(VERSION 3.15)
project(XXXXXXXXXX)
set(CMAKE_CXX_STANDARD 11)
# ==============================================================
# 路径输出确认
MESSAGE(STATUS "CMAKE_BINARY_DIR is :" ${CMAKE_BINARY_DIR})
MESSAGE(STATUS "PROJECT_BINARY_DIR is :" ${PROJECT_BINARY_DIR})
# ==============================================================
# .a .so 输出路径重新设置
#SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/../library)
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../library)
SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../bin)
# 可执行文件输出路径设置
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../bin)
# ==============================================================
# 添加子工程目录
add_subdirectory(source/XXXXXXXX)
#并指定输入目录
add_subdirectory(source/XXXXXXX library)
# ==============================================================
#MESSAGE(STATUS "CMAKE_ARCHIVE_OUTPUT_DIRECTORY is :" ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
#MESSAGE(STATUS "CMAKE_LIBRARY_OUTPUT_DIRECTORY is :" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
#MESSAGE(STATUS "CMAKE_RUNTIME_OUTPUT_DIRECTORY is :" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
# ==============================================================
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# ==============================================================
# 单独对目标进行指定
#set_target_properties(DataCollector.exe
# PROPERTIES
# ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/library"
# LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
# RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
#SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
MESSAGE(STATUS "Utils project CMAKE_BINARY_DIR is :" ${CMAKE_BINARY_DIR})
#INSTALL(FILES ./Utils.h DESTINATION ${CMAKE_BINARY_DIR}/../include)
#生成库文件
add_library(Utils STATIC Utils.cpp)
# 文件复制操作
file(COPY ./Utils.h DESTINATION ${CMAKE_BINARY_DIR}/../include/)
四、常见函数及使用
1、添加链接库所在的目录:
link_directories("./libs")
2、添加包含的头文件目录:
include_directories("./include")
3、添加子cmakelist.txt文件:
add_subdirectory("./3dparty/opencv")#也就是包含opencv文件夹下面的makelist.txt
4、设置输出目录:
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
5、设置c++编译选项:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
6、生成链接库:
add_library(faceattribute ${sourcefile})
7、生成可执行文件:
ADD_EXECUTABLE(lightpredict test/lightpredict.cpp )
8、链接第三方库:
#REQUIRED表示opencv是必须找到的,如果找不到就会报错
find_package( OpenCV REQUIRED )
#添加opencv的include路径
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS}
#链接opencv库文件
target_link_libraries(predict ${OpenCV_LIBS})
9、消息、变量打印:
set(mymessage "This is a message print!")
message(WARNING "${mymessage}")
10、搜索指定目录下所有源文件:
#搜索目录./src下面所有源文件,赋值给变量src
aux_source_directory("./src" src)
message(WARNING "${src}")