cmake 学习笔记(一) buildsystem
参见网址:
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
最新文章
- SQL 查询所有表名、字段名、类型、长度、存储过程、视图
- 谈“技术含量”的问题
- Playmaker Input篇教程之引入的核心概念
- mysql输出的错误提示是法语
- Jasper_crosstab_display a value of field in crosstab total row
- linux添加到普通用户sudo才干
- JavaEE:Servlet简介及ServletConfig、ServletContext
- Mysql清理二进制日志的技巧
- angular $stateProvider 路由的使用
- python辅助开发模块(非官方)如pil,mysqldb,openpyxl,xlrd,xlwd
- 玩转Spring Cloud之API网关(zuul)
- 006.ks.cfg文件相关
- SQLite中的表达式
- 阿里云服务器用smtp发送邮件返失败
- pycharm搭建开发配置,远程调试,数据库配置,git配置等
- VBA how to crack Excel Password
- Linux环境变量相关总结
- leetcode 74 搜索二维矩阵 java
- 数学 - Codeforces Round #319 (Div. 1)A. Vasya and Petya's Game
- Elastic Load Balancing with Sticky Sessions
热门文章
- Oracle强杀进程
- gitweb
- maven中的三种工程,以及在idea中构建父子工程。
- Varnish的VCL
- 解决Error for wireless request ";Set Mode"; (8B06) 问题 (转载)
- android_app c++框架
- LOJ#510. 「LibreOJ NOI Round #1」北校门外的回忆(线段树)
- linux 定义变量 ,添加变量值
- 页面置换算法-LRU(Least Recently Used)c++实现
- 在struct 中使用string,赋值会报错