参见网址:

http://www.cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html

Introduction

基于CMake的构建系统是一个高度化的条理分明的目标集合。每一个目标对应着一个可执行文件或者库,或者是一个自定义的包含自定义命令的目标。在构建系统中表达的目标之间的依赖关系,用来确定构建顺序和发生变化时的再生规则。

Binary targets

可执行文件和库文件分别通过命令 add_executable() 和 add_library() 来定义。最终生成的二进制文件根据目标平台有着合适的前缀名、后缀名和扩展名。二进制目标之间的依赖关系是通过命令 target_link_libraries() 来指定的:

add_library(archive archive.cpp zip.cpp lzma.cpp)
add_executable(zipapp zipapp.cpp)
target_link_libraries(zipapp archive)

"archive" 被定义成一个静态库--它包含的编译目标来自文件"archive.cpp", "zip.cpp" 和 "lzma.cpp"。

"zipapp" 被定义为一个可执行文件--编译并连接 "zipapp.cpp"。当连接可执行文件"zipapp" 时,静态库文件 "archive" 被连接进来。

Binary Executables

如下指令指定一个可执行目标:

add_executable(mytool mytool.cpp)

例如 add_custom_command() 指令(产生构建时的运行规则),可以显然地使用一个 "EXECUTALBE" 目标作为一个可执行的 "COMMAND"。构建系统的规则会确保在运行这个命令前先构建这个可执行的文件。

Binary Library Types

Normal Libraries

默认情况下,指令 "add_library()" 定义一个 static library,除非指定了类型。类型可以通过如下命令指定:

add_library(archive SHARED archive.cpp zip.cpp lzma.cpp)

add_library(archive STATIC  archive.cpp zip.cpp lzma.cpp)

可以通过使能变量 "BUILD_SHARED_LIBS" 来使得 add_library() 默认地构建 shared libraries。

在构建系统上下文中,特定的库是否指定为 SHARED 或者 STATIC 是毫不相干的---构建指令、依赖规则和其他的 APIs 不管库的类型以类似的方式工作。

而库类型 MODULE 是不相同的,通常它不会被链接,它也不会用在构建命令 target_link_libraries() 的右手边。

Object Libraries

最新文章

  1. SQL 查询所有表名、字段名、类型、长度、存储过程、视图
  2. 谈“技术含量”的问题
  3. Playmaker Input篇教程之引入的核心概念
  4. mysql输出的错误提示是法语
  5. Jasper_crosstab_display a value of field in crosstab total row
  6. linux添加到普通用户sudo才干
  7. JavaEE:Servlet简介及ServletConfig、ServletContext
  8. Mysql清理二进制日志的技巧
  9. angular $stateProvider 路由的使用
  10. python辅助开发模块(非官方)如pil,mysqldb,openpyxl,xlrd,xlwd
  11. 玩转Spring Cloud之API网关(zuul)
  12. 006.ks.cfg文件相关
  13. SQLite中的表达式
  14. 阿里云服务器用smtp发送邮件返失败
  15. pycharm搭建开发配置,远程调试,数据库配置,git配置等
  16. VBA how to crack Excel Password
  17. Linux环境变量相关总结
  18. leetcode 74 搜索二维矩阵 java
  19. 数学 - Codeforces Round #319 (Div. 1)A. Vasya and Petya's Game
  20. Elastic Load Balancing with Sticky Sessions

热门文章

  1. Oracle强杀进程
  2. gitweb
  3. maven中的三种工程,以及在idea中构建父子工程。
  4. Varnish的VCL
  5. 解决Error for wireless request "Set Mode" (8B06) 问题 (转载)
  6. android_app c++框架
  7. LOJ#510. 「LibreOJ NOI Round #1」北校门外的回忆(线段树)
  8. linux 定义变量 ,添加变量值
  9. 页面置换算法-LRU(Least Recently Used)c++实现
  10. 在struct 中使用string,赋值会报错