用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置。如果不进行 bin 目录的指定,那么编译结果(包括中间结果)都将存放在build/src 目录(这个目录跟原有的 src 目录对应),指定 bin 目录后,相当于在编译时将 src 重命名为 bin,所有的中间结果和目标二进制都将存放在 bin 目录
EXCLUDE_FROM_ALL:参数的含义是将这个目录从编译过程中排除,比如,工程的 example,可能就需要工程构建完成后,再进入 example 目录单独进行构建
IF(WIN32)
MESSAGE(STATUS “This is windows.”)#作一些 Windows 相关的操作
ELSE(WIN32)
MESSAGE(STATUS “This is not windows”)#作一些非 Windows 相关的操作
ENDIF(WIN32)
与下面的代码是等价的
#来控制 IF ELSE 语句的书写方式,使其更加简明、易读
SET(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
IF(WIN32)
MESSAGE(STATUS “This is windows.”)#作一些 Windows 相关的操作
ELSE()
MESSAGE(STATUS “This is not windows”)#作一些非 Windows 相关的操作
ENDIF()
IF(WIN32)#do something related to WIN32
ELSEIF(UNIX)#do something related to UNIX
ELSEIF(APPLE)#do something related to APPLE
ENDIF(WIN32)
定
义
目
标
操
作
系
统
(
T
a
r
g
e
t
O
p
e
r
a
t
i
n
g
S
y
s
t
e
m
)
的
名
称
\color{red}{定义目标操作系统(Target Operating System)的名称}
定义目标操作系统(TargetOperatingSystem)的名称
### qca-toolchain.cmake #### this is required
SET(CMAKE_SYSTEM_NAME Linux)# specify the cross compiler
SET(CMAKE_C_COMPILER /home/test/demo/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-gcc)
SET(CMAKE_CXX_COMPILER /home/test/demo/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-g++)# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /home/test/demo/staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2)# search for programs in the build host directories (not necessary)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# project name
PROJECT(pose)# define <projectname>_BINARY_DIR and <projectname>_SOURCE_DIR implicitly
message(STATUS " pose_BINARY_DIR: ${pose_BINARY_DIR}")
message(STATUS "PROJECT_BINARY_DIR: ${PROJECT_BINARY_DIR}")
message(STATUS " pose_SOURCE_DIR: ${pose_SOURCE_DIR}")
message(STATUS "PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}")# requirement of cmake version
cmake_minimum_required(VERSION 3.5)# set the directory of executable files
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)# check environment ENV{OPENNI2_INCLUDE}
if(NOT DEFINED ENV{OPENNI2_INCLUDE})
message(FATAL_ERROR "not defined environment variable:OPENNI2_INCLUDE")
endif()
message(STATUS "OPENNI2_INCLUDE: $ENV{OPENNI2_INCLUDE}")# check environment ENV{OPENNI2_REDIST}
if(NOT DEFINED ENV{OPENNI2_REDIST})
message(FATAL_ERROR "not defined environment variable:OPENNI2_REDIST")
endif()
message(STATUS " OPENNI2_REDIST:"$ENV{OPENNI2_REDIST})
set(CMAKE_CXX_FLAGS "-DUNIX -DGLX_GLXEXT_LEGACY -Wall")# find required OpenCV, OpenGL, GLUT
find_package(OpenCV REQUIRED)
find_package(OpenGL REQUIRED)
find_package(GLUT REQUIRED)# directory of headers (similar to -I)
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories($ENV{OPENNI2_INCLUDE})
include_directories(${OPENGL_INCLUDE_DIR})
include_directories(${GLUT_INCLUDE_DIR})# directory of library (similar to -L)
link_directories(${OpenCV_LIBRARY_DIRS})
link_directories($ENV{OPENNI2_REDIST})# find all the source files in the ./src, then save to DIR_SRCS
aux_source_directory(./src DIR_SRCS)
message(STATUS "DIR_SRCS: ${DIR_SRCS}")# add an executable to the project using the specified source files list.
add_executable(${PROJECT_NAME}${DIR_SRCS})# specify libraries or flags to use when linking a given target and/or its dependents.
target_link_libraries(${PROJECT_NAME}${OpenCV_LIBS}${OPENGL_LIBRARY}${GLUT_LIBRARY} OpenNI2)