CMake - boost

最后更新日期:2014-04-25by kagula

阅读前提:《CMake入门(二)》、Linux的基本操作

环境: Windows 8.1 64bit英文版。Visual Studio 203 Update1英文版。CMake 2.8.12.2、 Cent OS 6.5、Cent OS 6.5自带gcc 4.4.7、icu 4.2.1

内容简单介绍

介绍假设在VisualStudio上的项目依赖于boost库,怎样使用cmake工具把这个项目移到Cent OS上。

正文

CentOS下boost的安装

[S1]下载,解压缩到当前文件夹

#tar -zxvf boost_1_55_0.tar.gz

[S2]安装Boost.Regex的依赖icu

#yum install icu libicu-devel

[S3]进入boost解压缩文件夹。编译安装

#./bootstrap.sh

#./b2 install --prefix=/usr/local

这样boost的头文件会被拷贝到/usr/local/include路径,boost的静态库文件会被拷贝到/usr/local/lib路径。

Win下怎样安装boost參考资料[1]

在VisualStudio 2013上建立測试项目

新建[Visual C++]->[Win32]->[Win32Project]项目,Application type设置为console application, Additional options设置为Empty project。本次測试工程仅仅须要两个文件Source.cpp和CMakeLists.txt

如今加入Source.cpp,源代码清单:

include <iostream>
#include <boost/thread.hpp> using namespace std; void mythread()
{
cout << "Hello,thread!" << endl;
} int main()
{
boost::function<void()> f(mythread);
boost::thread t(f);
t.join(); cout << "thread is over" << endl; getchar(); return 0;
}

加入CMakeLists.txt,源代码清单例如以下

#设置项目名称
PROJECT(CMake_Tutorial3) #要求CMake的最低版本号为2.8
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #加入头文件搜索路径
INCLUDE_DIRECTORIES(/usr/local/include) #加入库文件搜索路径
LINK_DIRECTORIES(/usr/local/lib) #用于将当前文件夹下的全部源文件的名字保存在变量 DIR_SRCS 中
AUX_SOURCE_DIRECTORY(. DIR_SRCS) #用于指定从一组源文件 source1 source2 … sourceN(在变量DIR_SRCS中定义)
#编译出一个可运行文件且命名为CMake_Tutorial1
ADD_EXECUTABLE(CMake_Tutorial3 ${DIR_SRCS}) #加入编译可运行程序所须要的链接库、假设有多个中间用空格隔开
#第一个參数是可运行程序名称,第二个開始是依赖库
#在这里依据名字boost_thread去寻找libboost_thread.a文件
TARGET_LINK_LIBRARIES(CMake_Tutorial3 boost_thread)

在Cent OS上測试项目

如果我们在Win上的项目文件夹CMake_Tutorial3被拷贝到了/home/kagula/Downloads路径下。

进入路径,

$cd CMake_Tutorial3

$mkdir build

$cd build

读取父文件夹的CMakeLists.txt文件。生成Makefile文件

$cmake ..

读取Makefile。并编译项目,在当前文件夹下生成CMake_Tutorial3可运行文件

$make

执行编译出来的程序

$./CMake_Tutorial3

静态链接的优点是部署简单,不用操心目标环境,依赖库不存在或版本号不匹配,所以眼下为止我们的可运行程序都是静态链接依赖库,缺点是造成存储空间浪费,所以不适合有些大项目。下篇会提到怎样在Cent OS上用CMake工具编译动态链接库。

为什么VisualStudio2013上建的项目缺省是Win32项目而不是Win64? [1]非常少有项目须要用到大于2G的内存,[2]差点儿或没有性能提升,[3]64位系统能够执行32位程序,可是反过来不行。

參考资料

[1]《win7 vs2012 编译boost 1.55》

http://blog.csdn.net/alex_my/article/details/17630685

[2]《Bash script toinstall gcc 4.8.2 and boost 1.55.0 on CentOS 6.4, CentOS 5.5 and Mac OS X 10.9》

http://joelinoff.com/blog/?p=1003

CMake - boost - 可运行程序 - 静态库的更多相关文章

  1. CMake学习(1)---简单程序与库

    cmake是linux平台下重要的工具,可以方便的组织makefile.之前一直在windows平台下进行软件开发,在vs2010的IDE里,只要一点run程序就能跑出结果.但是程序的编译并没有那么简 ...

  2. cmake 强制链接静态库

    add_executable(main main.cpp) target_link_libraries(main ${CMAKE_SOURCE_DIR}/libbingitup.a) 静态库和动态库共 ...

  3. cmake利用toolchain.cmake生成makefile之后,make生成静态库失败问题

    问题描述 利用toolchian.cmake设置好编译器后,利用make指令生成静态库,出现以下问题 Error running link command: No such file or direc ...

  4. Linux下Gcc生成和使用静态库和动态库详解(转)

    一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...

  5. iOS静态库小结--(yoowei)

    准备知识: 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 a.开源库 公开源代码,能看到具体实现 ,比如SDWebImage.AFNetw ...

  6. Linux下Gcc生成和使用静态库和动态库详解

    参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...

  7. 在Linux中创建静态库.a和动态库.so

    转自:http://www.cnblogs.com/laojie4321/archive/2012/03/28/2421056.html 在Linux中创建静态库.a和动态库.so 我们通常把一些公用 ...

  8. iOS : 静态库制作

    一.静态库简介 1. 什么是库? 库 就是程序代码的集合, 是共享程序代码的一种方式 2. 库的分类? 开源库 公开源代码, 能看到具体实现 例如MJExtension, MJRefresh, AFN ...

  9. [转]Linux下用gcc/g++生成静态库和动态库(Z)

    Linux下用gcc/g++生成静态库和动态库(Z) 2012-07-24 16:45:10|  分类: linux |  标签:链接库  linux  g++  gcc  |举报|字号 订阅     ...

随机推荐

  1. ogre3D学习基础11 -- 交换两个场景管理器

    这一节,练习一下前几次学习的内容,功能很简单,就是建立两个不同的场景管理器,当按下键盘上某个键时切换镜头. 基本框架不变,这个监听器继承了两个父类,一个是我们的老朋友ExampleFrameListe ...

  2. css中可继承和不可继承属性

    一.无继承性的属性 1.display:规定元素应该生成的框的类型 2.文本属性: vertical-align:垂直文本对齐 text-decoration:规定添加到文本的装饰 text-shad ...

  3. Leetcode 479.最大回文数乘积

    最大回文数乘积 你需要找到由两个 n 位数的乘积组成的最大回文数. 由于结果会很大,你只需返回最大回文数 mod 1337得到的结果. 示例: 输入: 2 输出: 987 解释: 99 x 91 = ...

  4. Leetcode 466.统计重复个数

    统计重复个数 定义由 n 个连接的字符串 s 组成字符串 S,即 S = [s,n].例如,["abc", 3]="abcabcabc". 另一方面,如果我们可 ...

  5. Leetcode 435.无重叠区间

    无重叠区间 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠. 注意: 可以认为区间的终点总是大于它的起点. 区间 [1,2] 和 [2,3] 的边界相互"接触" ...

  6. SpriteKit-(SKNode)

    1.初始化 + (instancetype)node; + (nullable instancetype)nodeWithFileNamed:(NSString*)filename; 2.返回边界边框 ...

  7. 【Luogu】P2634聪聪可可(树形DP)

    题目链接 水题,时限放得非常宽,暴力DP随便套上一波register就能卡过去. 唯一的遗憾是5A. 树形DP,s[i][j]表示以i为根的子树里距i的距离%3=j的点数,f[i]表示i为根的子树内一 ...

  8. 【Luogu】P2709小B的询问(莫队算法)

    题目链接 md,1A率等于0. 烦死. 终于搞到一道莫队了qwq. 先对区间分块再按照块编号为第一关键字,右端点为第二关键字排序,然后每次端点移动1乱搞. 然后……就wa了. 然后有很多细节需要注意q ...

  9. 【HDU4372】Count the Buildings (第一类斯特林数)

    Description $N$座高楼,高度均不同且为$1~N$中的数,从前向后看能看到$F$个,从后向前看能看到$B$个,问有多少种可能的排列数. $T$组询问,答案模$1000000007$.其中$ ...

  10. 标准C程序设计七---45

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...