PROJECT(main)
#表示项目的名称是 main
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
#限定 CMake 的版本
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
#将当前目录中的所有的源文件名称赋值给变量 DIR_SRCS
ADD_EXECUTABLE(main ${DIR_SRCS})
#变量 DIR_SRCS 中的源文件需要编译 成一个名称为 main 的可执行文件
ADD_SUBDIRECTORY( src )
#指明本项目包含一个子目录 src
TARGET_LINK_LIBRARIES( main Test )
#可执行文件 main 需要连接一个名为Test的链接库
ADD_LIBRARY ( Test ${DIR_TEST1_SRCS})
#将 DIR_TEST1_SRCS目录中的源文件编译为共享库
01 MESSAGE(STATUS "Using bundled Findlibdb.cmake...")
02
03 FIND_PATH(
04 LIBDB_CXX_INCLUDE_DIR
05 db_cxx.h
06 /usr/include/
07 /usr/local/include/
08 )
09
10 FIND_LIBRARY(
11 LIBDB_CXX_LIBRARIES NAMES db_cxx
12 PATHS /usr/lib/ /usr/local/lib/
13 )
文件 Findlibdb_cxx.cmake 的命名要符合规范:
FindlibNAME.cmake ,其中NAME 是函数库的名称
命令
MESSAGE
会
将参数
的内容
输出到终端
。
命令
FIND_PATH
指明头文件查找的路径,
原型如下
:
find_path( name1 [path1 path2 ...])
该命令在参数
path*
指示的目录中查找文件
name1
并将查找到的路径保存在变量
VAR
中。清单
5
第
3
-
8
行的意思是在
/usr/include/
和
/usr/local/include/
中查找文件
db_cxx.h ,
并将
db_cxx.h
所在的路径保存在
LIBDB_CXX_INCLUDE_DIR
中。
命令
FIND_LIBRARY
同
FIND_PATH
类似
,
用于查找链接库并将结果保存在变量中。清单
5
第
10
-
13
行的意思是在目录
/usr/lib/
和
/usr/local/lib/
中寻找名称为
db_cxx
的链接库
,
并将结果保存在
LIBDB_CXX_LIBRARIES
。
在项目的根目录中创建
可以查找链接库的 CMakeList.txt
01 PROJECT(main)
02 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
03 SET(CMAKE_SOURCE_DIR .)
04 SET(CMAKE_MODULE_PATH ${CMAKE_ROOT}/Modules ${CMAKE_SOURCE_DIR}/cmake/modules)
#到目录 ./cmake/modules 中查找 Findlibdb_cxx.cmake
05 AUX_SOURCE_DIRECTORY(. DIR_SRCS)
06 ADD_EXECUTABLE(main ${DIR_SRCS})
07
#8-19 行表示查找链接库和头文件的过程
08 FIND_PACKAGE( libdb_cxx REQUIRED)
09 MARK_AS_ADVANCED(
10 LIBDB_CXX_INCLUDE_DIR
11 LIBDB_CXX_LIBRARIES
12 )
13 IF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES)
14 MESSAGE(STATUS "Found libdb libraries")
15 INCLUDE_DIRECTORIES(${LIBDB_CXX_INCLUDE_DIR})
16 MESSAGE( ${LIBDB_CXX_LIBRARIES} )
17 TARGET_LINK_LIBRARIES(main ${LIBDB_CXX_LIBRARIES}18 )
19 ENDIF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES)
https://www.ibm.com/developerworks/cn/linux/l-cn-cmake/