//工程名称
1 PROJECT(main)
//令限定了 CMake 的版本
2 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
//aux_source_directory(<dir> <variable>)
//该命令会把参数 <dir> 中所有的源文件名称赋值给参数 <variable>
3 AUX_SOURCE_DIRECTORY(. DIR_SRCS)
//指明本项目包含一个子目录 src
4 ADD_SUBDIRECTORY( src )
//指明可执行文件 main 需要连接一个名为Test的链接库
6
TARGET_LINK_LIBRARIES( main Test )
//exe 执行目录
7
ADD_EXECUTABLE(main ${DIR_SRCS})
//使用命令 ADD_LIBRARY 将 src 目录中的源文件编译为共享库
8
ADD_LIBRARY ( Test ${DIR_TEST1_SRCS})
ADD_LIBRARY(hello STATIC ${SOURCE_1}) //#告诉CMake生成的是一个静态库
9
INCLUDE_DIRECTORIES(include) //head file path
INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include/")//告诉CMake头文件在哪里?
10
FILE(GLOB SOURCE "./*.cpp") //#告诉CMake:工程的源文件在哪里?
11
SET(PROJECT_ROOT_PATH "${CMAKE_SOURCE_DIR}/../") // #工程的根目录
SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin/") // #可执行生成后存放的目录(CMAKE_SOURCE_DIR是cmake目录)
SET(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/lib/") // #静态库生成后存放的目录
12
FIND_PATH 指明头文件查找的路径,原型如下:
FIND_PATH (<VAR> name1 [path1 path2 ...]) 该命令在参数 path* 指示的目录中查找文件 name1 并将查找到的路径保存在变量 VAR 中。
FIND_LIBRARY 同 FIND_PATH 类似,用于查找链接库并将结果保存在变量中。
FIND_PACKAGE //会到 指示的目录中查找文件
13
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") //调试版
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") //发行版
14
make clean //清理工程
//用$ENV{VAR}得到环境变量的引用
15
Set(ENV{VAR} /home) //设置环境变量
//
16
if(var)
some_command(...)
endif(var)
foreach(f ${VAR})
message(${f})
endforeach(f)
17
function(get_lib lib_FILE lib_NAME lib_PATH)
some_thing(...)
endfunction(get_lib)
///
比如 CHECK_SYMBOL_EXISTS(SHM_HUGETLB sys/shm.h HAVE_DECL_SHM_HUGETLB)
该CMake文件的包含了 INCLUDE(CheckSymbolExists)
CheckSymbolExists 是CMake的公共模块,我的机器上位于/usr/share/cmake-2.8/Modules目录下。
我们继续研究该文件:
阅读了其源代码后,MACRO(CHECK_SYMBOL_EXISTS SYMBOL FILES VARIABLE)
这个宏的作用就是,查找相关文件(FILES)里面是否包含相关符号(SYMBOL) 如果存在则设置VARIABLE 为1,MESSAGE宏会在屏幕上做相关打印。
上面的列子中就是在 sys/shm.h 文件里面查找SHM_HUGETLB 符号。
//修改libhello 为hello
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
//控制 Debug 和 Release 模式的构建
SET(CMAKE_BUILD_TYPE Debug)
FIND_PACKAGE( name ):
在指定的模块目录中搜索一个名为Find<name>.cmake(例如,FindOSG.cmake)的CMake脚本模块文件,执
行其中的内容,以图搜索到指定的外部依赖库头文件和库文件位置。
INCLUDE( file ):
在当前文件中包含另一个CMake脚本文件的内容。
ADD_DEFINITIONS( -DMACRO1 –DMACRO2 … ):
添加-D预编译宏定义,可以一次添加多个。
CONFIGURE_FILE( infile outfile ):
将文件infile复制到outfile的位置,同时执行其中变量的自动配置和更替,即,将infile中所有形同
“${VAR}”和“@VAR@”的变量替换为对应的内容,并拷贝到outfile中,而这个新生成的outfile文件也
可以在之后的脚本代码中得以使用。