要在不同平台上构建不同的工程需要使用到构建工具,很多开源项目都是用的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. 35岁危机可能是真的!调查显示在领英上年龄越大越难找工作,得贴年轻头像才行...
  2. RoadMap,走出自己的特色主义
  3. go程序的编译和运行
  4. 10.30 NFLS-NOIP模拟赛 解题报告
  5. spring 整合mongodb报NoSuchMethodError错误
  6. swap(a,b)值交换的4种方法
  7. 计算机网络中的物理层
  8. Shiro笔记(四)编码/加密
  9. SQL必知必会【极客时间笔记】
  10. 什么情况下使用10分钟邮箱?8个临时邮箱推荐
  11. 医疗器材行业如何利用三类医疗器械进销存软件
  12. PWM如何控制直流电机
  13. 固态硬盘安装系统时显示,windows无法完成格式化解决办法。
  14. MRI T1加权结构
  15. hr面试性格测试30题_HR性格测试题.doc
  16. 论“无常,苦、无我”
  17. 阿里大数据之路 总述
  18. 【Hive】常用日期格式转换和计算
  19. bluehost虚拟主机有什么用?适合做什么网站呢?
  20. 把简单的 Postman,玩出花样?

热门文章

  1. VS2017无中文智能提示解决办法
  2. IP冲突解决解决方法
  3. android的多开器解析和检测实现
  4. jvm性能调优工具 jhat
  5. IE功能汇总(javascript)
  6. AI“牵手”BIM,未来建筑业会发生怎样的巨变?
  7. Android开发艺术探索笔记
  8. 【游】优秀游戏场景分析
  9. DW1000 学习笔记1 - 概述简报
  10. [Win+Python]使用python接口测试时302重定向的两种处理方法