CMAKE 笔记

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目录中的源文件编译为共享库


在工程中查找并使用其他程序库的方法:

例如项目需要头文件db_cxx.h 和链接库 libdb_cxx.so

第一步,在项目的根目录中创建目录 cmake/modules/ ,在 cmake/modules/ 下创建
文件 Findlibdb_cxx.cmake内容如下:

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 中。清单538行的意思是在 /usr/include/ /usr/local/include/ 中查找文件db_cxx.h ,并将db_cxx.h所在的路径保存在 LIBDB_CXX_INCLUDE_DIR中。
  • 命令 FIND_LIBRARY  FIND_PATH 类似,用于查找链接库并将结果保存在变量中。清单51013行的意思是在目录 /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)


使用 cmake 生成 debug 版和 release 版的程序

CMake 中有一个变量 CMAKE_BUILD_TYPE ,
可以的取值是 Debug Release RelWithDebInfo 和 MinSizeRel


https://www.ibm.com/developerworks/cn/linux/l-cn-cmake/

你可能感兴趣的:(Linux)