1、基本要素

PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

AUX_SOURCE_DIRECTORY(. DIR_SRCS)	## 获取目录中的源文件到变量
FILE(GLOB SOURCE "./*.cpp")		## 直接指明源文件
ADD_EXECUTABLE(main ${DIR_SRCS})	## 编译目录中的源文件,变成可执行文件main

2、多级目录,先添加子目录,再链接;字母,子目录中编译共享库

## 主目录
ADD_SUBDIRECTORY( src )
TARGET_LINK_LIBRARIES( main Test )
## 子目录
AUX_SOURCE_DIRECTORY(. DIR_TEST1_SRCS)
ADD_LIBRARY ( Test ${DIR_TEST1_SRCS})

3、使用其他库

例如需要库文件libxxx.so和头文件xxx.h,需要在根目录中创建cmake/modules/Findlibxxx.cmake

MESSAGE(STATUS "Using bundled Findlibdb.cmake...")	## 输出参数内容
FIND_PATH(						## 头文件查找路径 find_path(<VAR> name1 [path1 path2 ...])
  LIBDB_CXX_INCLUDE_DIR
  db_cxx.h 
  /usr/include/ 
  /usr/local/include/ 
)
 
FIND_LIBRARY(						## 库文件查找路径
  LIBDB_CXX_LIBRARIES NAMES  db_cxx
  PATHS /usr/lib/ /usr/local/lib/
)

主目录中CMakeList.txt

SET(CMAKE_MODULE_PATH ${CMAKE_ROOT}/Modules ${CMAKE_SOURCE_DIR}/cmake/modules) 	## 设置CMAKE_MODULE_PATH
FIND_PACKAGE(libxxx REQUIRED)							## FIND_PACKAGE从CMAKE_MODULE_PATH中查找Findlibxxx.cmake
MARK_AS_ADVANCED(								## 设置高级变量(在GUI高级变量中显示)
  LIBXXX_INCLUDE_DIR
  LIBXXX_LIBRARIES
)
IF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES)				## 判断,如果有高级变量
  INCLUDE_DIRECTORIES(${LIBXXX_INCLUDE_DIR})					## 加入include路径与lib路径
  TARGET_LINK_LIBRARIES(main ${LIBXXX_LIBRARIES})
ENDIF (LIBDB_CXX_INCLUDE_DIR AND LIBDB_CXX_LIBRARIES)

ShengYg

Step after step the ladder is ascended.


Tags •