cmake教程(五)函数

调用cmake文件

比如在CMakeLists.txtinclude("${YOUR_CMAKE_DIR}/functions.cmake"),然后可以调用其中的函数。

target_include_directories

file GLOB_RECURSE

格式为 file(GLOB variable [RELATIVE path] [globbingexpressions]...)

典型应用:

1
2
file(GLOB_RECURSE cpps *.cpp)
message(STATUS "cpps: ${cpps}")

GLOB_RECURSE 与GLOB类似,区别在于它会遍历匹配目录的所有文件以及子目录下面的文件。

1
2
3
4
5
file(GLOB_RECURSE ALL_SRCS "*.cc" "*.h")
file(GLOB_RECURSE ALL_TESTS "*_test.cc")
file(GLOB_RECURSE ALL_EXECUTABLES "*_main.cc")
list(REMOVE_ITEM ALL_SRCS ${ALL_TESTS})
list(REMOVE_ITEM ALL_SRCS ${ALL_EXECUTABLES})

option

option(<variable> "<help_text>" [value])
对于value,不给定或给定其他值都默认 OFF

实际使用时可以作为开关使用

1
2
3
4
5
6
7
cmake_minimum_required(VERSION 3.5)
project(test_6)

option(OPENGL_VIEW "Enable GLUT OpenGL point cloud view" ON)
if(OPENGL_VIEW)
...
endif()

foreach

foreach与C++里的功能一样,语法略有不同

1
2
3
4
5
set(dirs abc foo nfk)         # 三个字符串加到dirs里面
message(STATUS "dirs: ${dirs}")
foreach(dir ${dirs})
message(STATUS "dir: ${dir}")
endforeach(dir ${dirs})

运行结果:

1
2
3
4
-- dirs:    abc;foo;nfk
-- dir: abc
-- dir: foo
-- dir: nfk