cmake使用笔记

cmake使用笔记

  记录cmake学习及使用中的一些技巧与方法

  cmake命令参见:https://www.cnblogs.com/hgwang/p/9086691.html

1 消息输出message

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...)

  可以用下述可选的关键字指定消息的类型:

      (无)           = 重要消息;
    STATUS = 非重要消息;
    WARNING = CMake 警告, 会继续执行;
    AUTHOR_WARNING = CMake 警告 (dev), 会继续执行;
    SEND_ERROR = CMake 错误, 继续执行,但是会跳过生成的步骤;
    FATAL_ERROR = CMake 错误, 终止所有处理过程;

  CMake的命令行工具会在stdout上显示STATUS消息,在stderr上显示其他所有消息。CMake的GUI会在它的log区域显示所有消息。交互式的对话框(ccmake和CMakeSetup)将会在状态行上一次显示一条STATUS消息,而其他格式的消息会出现在交互式的弹出式对话框中。

  CMake警告和错误消息的文本显示使用的是一种简单的标记语言。文本没有缩进,超过长度的行会回卷,段落之间以新行做为分隔符。

  CMAKE可以输出cmake变量的取值,如message(status "binary dir" ${PROJECT_BINARY_DIR})

2 外部构建,cmake编译与源文件分离

  创建如下所示文件目录结构:

  

图1

  源文件路径下CMakeLists.txt内容:

1 CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
2 PROJECT(HELLOLIB CXX)
3 
4 ADD_SUBDIRECTORY(src)

   利用ADD_SUBDIRECTORY指定子目录下的CMakeLists.txt

  src路径下CMakeLists.txt内容:

 1 SET (SRC_PATH "${PROJECT_SOURCE_DIR}/src")
 2 
 3 FILE(GLOB SRC_HEADER_LIST ${SRC_PATH}/*.h)
 4 FILE(GLOB SRC_SOURCE_LIST ${SRC_PATH}/*.cpp)
 5 SOURCE_GROUP("ABC HEAD" FILES ${SRC_HEADER_LIST} )
 6 SOURCE_GROUP("ABC SRC" FILES  ${SRC_SOURCE_LIST})
 7 #SOURCE_GROUP("ABC HEAD" FILES ${SRC_HEADER_LIST} ${SRC_SOURCE_LIST})
 8 
 9 SET(SRC_LIST ${SRC_HEADER_LIST} ${SRC_SOURCE_LIST})
10 
11 MESSAGE(STATUS "all list " ${SRC_LIST})
12 
13 MESSAGE(STATUS "This is binary dir " ${HELLOLIB_BINARY_DIR})
14 MESSAGE(STATUS "This is source dir " ${HELLOLIB_SOURCE_DIR})
15 
16 ADD_LIBRARY(HELLO SHARED ${SRC_LIST} )

  在build下执行 命令“cmake ..”,将编译路径指定到build上层路径,在build下生产cache及项目文件。

3 IDE构建目录树

  SET/FILE/SOURCE_GROUP指令相结合,生成IDE目录结构。如图1,如需将src下h和cpp文件各自构建一个目录,使用下面方法:

 1 SET (SRC_PATH "${PROJECT_SOURCE_DIR}/src")
 2 
 3 FILE(GLOB SRC_HEADER_LIST ${SRC_PATH}/*.h)
 4 FILE(GLOB SRC_SOURCE_LIST ${SRC_PATH}/*.cpp)
 5 SOURCE_GROUP("ABC HEAD" FILES ${SRC_HEADER_LIST} )
 6 SOURCE_GROUP("ABC SRC" FILES  ${SRC_SOURCE_LIST})
 7 
 8 SET(SRC_LIST ${SRC_HEADER_LIST} ${SRC_SOURCE_LIST})  
 9 
10 ADD_LIBRARY(HELLO SHARED ${SRC_LIST} )

  第一行:定义src路径 --> 变量SRC_PATH

  第三行:定义src路径下所有h文件 --> 变量SRC_HEADER_LIST

  第四行:定义src路径下所有cpp文件 --> 变量SRC_SOURCE_LIST

  第五行:定义IDE目录树,src路径下所有h文件(变量SRC_HEADER_LIST) --> 目录名称"ABC HEAD"

  第六行:定义IDE目录树,src路径下所有cpp文件(变量SRC_SOURCE_LIST) --> 目录名称"ABC SRC"

  第8行:h文件和cpp文件赋值给变量SRC_LIST

  第9行:利用h文件和cpp文件(SRC_LIST)创建工程

猜你喜欢

转载自www.cnblogs.com/hgwang/p/9100343.html