参见网址:

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

cmake 学习笔记(一) buildsystem的更多相关文章

  1. cmake学习笔记(五)

    在cmake 学习笔记(三) 中简单学习了 find_package 的 model 模式,在cmake 学习笔记(四)中了解一个CMakeCache相关的东西.但靠这些知识还是不能看懂PySide使 ...

  2. cmake 学习笔记(三)

    转自:http://blog.csdn.net/dbzhang800/article/details/6329314 接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cma ...

  3. cmake 学习笔记(二)

    在 Cmake学习笔记一 中通过一串小例子简单学习了cmake 的使用方式. 这次应该简单看看语法和常用的命令了. 简单的语法 注释 # 我是注释 命令语法 COMMAND(参数1 参数2 ...) ...

  4. cmake 学习笔记(三) (转)

    接前面的 Cmake学习笔记(一) 与 Cmake学习笔记(二) 继续学习 cmake 的使用. 学习一下cmake的 finder. finder是神马东西? 当编译一个需要使用第三方库的软件时,我 ...

  5. CMake学习笔记四:usb_cam的CMakeLists解析

    最近在学习cmake,在完整看了<cmake实践>一书后,跟着书上例程敲了跑了一遍,也写了几篇相关读书笔记,算是勉强基本入门了.所以找了usb_cam软件包的CMakeLists.txt来 ...

  6. cmake 学习笔记(六)

    希望这是现阶段阻碍阅读shiboken和PySide源码的涉及cmake的最后一个障碍 ^ _^ 学习 cmake 的单元测试部分 ctest. 简单使用 最简单的使用ctest的方法,就是在 CMa ...

  7. cmake 学习笔记(四)

    接前面的一二三,学习一下 CMakeCache.txt 相关的东西. CMakeCache.txt 可以将其想象成一个配置文件(在Unix环境下,我们可以认为它等价于传递给configure的参数). ...

  8. cmake 学习笔记(一)

    最大的Qt4程序群(KDE4)采用cmake作为构建系统 Qt4的python绑定(pyside)采用了cmake作为构建系统 开源的图像处理库 opencv 采用cmake 作为构建系统 ... 看 ...

  9. cmake学习笔记之add_library、target_link_libraries和link_directories

    cmake是Linux(这里默认是Ubuntu系统)下常使用的编译C++的工具,而使用cmake就需要先在CmakeLists.txt文件中对编译规则进行.这里介绍常用的三种指令add_library ...

随机推荐

  1. 论如何O(1)快速乘

    然而并没有什么好论的... 直接贴代码算了... ll Mul(ll x,ll y,ll Mod){ x=(x%Mod+Mod)%Mod;y=(y%Mod+Mod)%Mod; return (x*y- ...

  2. codeforces AIM Tech Round 4 div 2

    A:开个桶统计一下,但是不要忘记k和0比较大小 #include<bits/stdc++.h> using namespace std; ]; ]; int main() { int k; ...

  3. uva1563

    https://vjudge.net/problem/UVA-1563 高斯消元解同余方程组 就是把原来的除法换成逆元,其他的都一样 #include<bits/stdc++.h> usi ...

  4. js实现页面的全屏与退出

    1.在data里面定义: data(){ return{ isScreen:false, } } //是否显示全屏 fullScreen(event){ this.isScreen = !this.i ...

  5. golang——log包学习

    log包实现了简单的日志服务. 1.func New(out io.Writer, prefix string, flag int) *Logger New创建一个Logger. 参数out设置日志信 ...

  6. 2017杭电多校第七场1011Kolakoski

    Kolakoski Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others) Tota ...

  7. 无法收集统计信息,怎样优化SQL。

    特殊情况如下 客户的统计信息是固定的,没办法收集统计信息 . SQL profile 是最后考虑方案,因为同样写法sql 比较多,几十条. Parallle 并行客户一般不考虑接受,OLTP 系统. ...

  8. [转]T4系列文章之3:T4语法的介绍

    本文转自:http://www.cnblogs.com/damonlan/archive/2012/03/06/2382724.html 因为这段时间一直都没空,我也不知道有没有对人T4感兴趣,但不管 ...

  9. git add . 的时候报错fatal: Unable to create : …File exists.

    报错内容: $ git add . fatal: Unable to create 'E:/project/qbm_cs/.git/index.lock': File exists. Another ...

  10. HTTP常见面试题

    转自:http://www.cnblogs.com/Java3y/p/8444033.html Http与Https的区别: Http与Https的区别: HTTP 的URL 以http:// 开头, ...