要在不同平台上构建不同的工程需要使用到构建工具,很多开源项目都是用的makefile,但是这东西并不怎么适合国人的习惯,我喜欢双击工程文件自动打开xcode或者vs2013.然后再开发工具里面写代码。编译,链接,单步调试等。所以我不打算用makefile,而是用cmake 来构建。

这里简单描述一下cmake 是干什么的。cmake 是一个工具,一个可执行程序。 他需要一个名字为"CMakeLists.txt" 文件来配合。就和make 工具需要makefile 文件一样。假如下载了一个开源代码,如果发现目录下有 "CMakeLists.txt" 文件,那就爽了。可以直接生成vs工程或者xcode工程。我这里说一下我的设计。

1) 一个总的CMakeLists.txt。 这个文件用来定义所有的工程。可以想象成这是一个解决方案。解决方案里面会包含很多的子工程。

#XPhone_Plus 解决方案的名称

project(XPhone_Plus)

#需要的cmake 版本号

cmake_minimum_required(VERSION 2.8)

#cmake 的路径

SET (CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/build/CMakeModules/;${CMAKE_MODULE_PATH}")

#子工程生成的一些路径。比如lib 文件生成在哪个目录。bin 生成的目录等

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../lib)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../lib)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/../bin)

# 这个包含了一些全局设置,比如说工程要生成的编译选项,要生成哪几种的工程等。globalsetting 是一个自己写的文件,但是里面#的内容基本通用。

INCLUDE (globalsetting)

#下面就是这个解决方案的子工程了

add_subdirectory(src/Common)

add_subdirectory(src/XPhonePlus)

add_subdirectory(src/Test)

2) 每个工程一个CMakeLists.txt。

工程中有目录结构,还有需要编译的文件列表,以及宏定义等等,这些就需要每个工程自己来定义了,所以一个工程里面放一个CMakeLists.txt 还是比较合理的。

#cryptopp工程名

project (cryptopp)

#根据不同的平台定义一些宏定义

if (WIN32)

#-DUSE_PRECOMPILED_HEADERS  说明一下:-D 是一个前缀,真正的宏定义是后面 USE_PRECOMPILED_HEADERS

ADD_DEFINITIONS(-DUSE_PRECOMPILED_HEADERS)

if (CMAKE_X64)

ADD_DEFINITIONS(-DCRYPTOPP_DISABLE_ASM)

endif(CMAKE_X64)

elseif(APPLE)

#多个宏定义之间用空格隔开,比如下面USE_PRECOMPILED_HEADERSCRYPTOPP_DISABLE_ASM 隔开了

ADD_DEFINITIONS(-DUSE_PRECOMPILED_HEADERS -DCRYPTOPP_DISABLE_ASM)

endif (WIN32)

INCLUDE_DIRECTORIES (${COMMON_INCLUDE} . ..)

#下面就是文件列表了

FILE (GLOB header_files *.h)

FILE (GLOB source_files *.c *.cpp)

#ADD_LIBRARY表示生成一个静态库。  ADD_EXECUTABLE 表示生成一个exe 文件

ADD_LIBRARY (cryptopp ${header_files} ${source_files})

所以使用cmake 来构建是非常方便的。无论是mac osx 还是windows 都很方便

第一步算是完成了。

android手机助手源代码,IOS Android 手机助手原理以及源码(cmake 构建)相关推荐

  1. Android开发从入门到精通教程大总结(源码,教程,面试题,书籍,视频)

    老罗:  http://blog.csdn.net/column/details/androidluo.html http://xiaozu.renren.com/xiaozu/100692/3569 ...

  2. android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估

    文章目录 android视频缓存框架 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache) 源码解析与评估 引言 使用方 ...

  3. 安卓航班Android开发经典教程大总结1----基础编程及源码推送

    上篇主要讲述了社区的总体规划以及总结此次教程的目的,接下来开始正式总结android开发相关知识,从最简单的环境搭建到正式项目的制作,当然教程是总结来的,同时再次声明资料很多来自互联网,如有侵权请联系 ...

  4. Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

    <div id="container">         <div id="header">     <div class=&qu ...

  5. Android Handler中的handleMessage方法和post方法之源码剖析

    我们都知道,在子线程中进行UI操作(更新UI控件)包括以下四种方法: 1.Handler的handlerMessage()方法. 2.Handler的post()方法. 3.View的post()方法 ...

  6. 【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153761 记得在前面的文章中,我带大家一起从源码的角度分析了Android中Vi ...

  7. Android AOSP基础(五)不会调试系统源码,还搞什么Android?

    本文首发于微信公众号「刘望舒」 关联系列 Android AOSP基础系列 Android系统启动系列 应用进程启动系列 Android深入四大组件系列 Android深入理解Context系列 An ...

  8. Android音频实时传输与播放(四):源码下载(问题更新)【转】

    Android音频实时传输与播放(四):源码下载(问题更新) 激动人心的时刻到了有木有 ^_^ 服务端下载请点击这里,客户端下载请点击这里! 最近有朋友在下载源码使用之后,说播放出来的声音噪声很大.其 ...

  9. Android 系统(177)---Android消息机制分析:Handler、Looper、MessageQueue源码分析

    Android消息机制分析:Handler.Looper.MessageQueue源码分析 1.前言 关于Handler消息机制的博客实际上是非常多的了. 之前也是看别人的博客过来的,但是过了一段时间 ...

最新文章

  1. ASP.NET 2.0 ajax中gridView的刷新问题!
  2. 微信自定义内置返回事件
  3. 参与组织社区活动总结
  4. 【POJ 3273】 Monthly Expense (二分)
  5. auto_ptr使用介绍
  6. 我写的第一个CodeSmith模板(添加修改数据页面)
  7. 股票市值管理什么意思?
  8. python逐行读取txt文件-在python 3.4上逐行读取文本文件
  9. 毕业设计论文封面模板
  10. linux命令:常用shell命令及应用
  11. 抽离css以及公共js
  12. 瑞友杯虚拟化征文---瑞友天翼应用虚拟化之实战演示
  13. 为什么要读“无用”的古文
  14. 计算机专业英语教程ppt,计算机专业英语教程课件.ppt
  15. python爬虫视频教程
  16. java基础周报_java第四周周报
  17. matlab 精品课程,同济大学经济与管理学院精品课程
  18. VMWare 设置CentOS虚拟机固定IP地址
  19. 你选择双休还是单休?
  20. 梯度下降原理(SGD,Adam,BGD,momentum,Adagrad,NAG)

热门文章

  1. 内网安装ntpdate时间同步工具
  2. 第十六章 BIRT疑难杂惑清理
  3. Revit Architecture基础概述学习记录
  4. SQL调优简介及调优方式
  5. 小白的测试人生(二)——软件测试行业发展现状及前景
  6. 《硅谷钢铁侠》听书笔记
  7. 安卓微信支付开发基本流程-demo篇
  8. 人口流失全国第一,这个省怎么了?
  9. [计算模型]%90的银弹
  10. Linux 环境将cert证书转为pem格式