文档章节

Cmake 使用和交叉编译配置

雨中人X
 雨中人X
发布于 2017/04/15 11:28
字数 804
阅读 120
收藏 1

Cmake能做什么

CMake 是个跨平台的自动化建构系统,它用组态档控制建构过程的方式和 Unix 的 Make 相似,
是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准
的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一
般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的
软件,CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建
构执行档。CMake 支援 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建
构(二进档在别的目录里)

Cmake 基本使用

cmake_minimum_required(VERSION 2.6)
project(hello)

# 添加头文件路径
include_directories(include/)

# 查找src目录下的源文件并添加到 SRC变量中
aux_source_directory(src SRC)

# 指定编译后的程序名称,和相关代码文件
add_executable(hello main.cpp ${SRC})

# 指定安装规则,默认安装到/usr/local 目录下
install(TARGETS hello RUNTIME DESTINATION bin)

文件结构

.
├── build
├── CMakeLists.txt
├── include
├── main.cpp
└── src

注: build 目录不是必须的,主要是因为Cmake生成Makefile时会产生一下临时文件,所以使用了(out-of-place),这样方便管理文件,建议使用(out-of-place)方式,除非你不介意工程目录中多临时文件。

编译时 进入build目录,执行命令(下同)

cmake .. && make

Cmake添加静态库模块

根目录下的 CmakeLists.txt

project(hello)

# 添加头文件路径
include_directories(include/ lib/)
# 添加模块
add_subdirectory(lib)
# 查找src目录下的源文件并添加到 SRC变量中
aux_source_directory(src SRC)

# 设置链接
link_libraries(sub)

# 指定编译后的程序名称,和相关代码文件
add_executable(hello main.cpp ${SRC})

# 指定安装规则,默认安装到/usr/local 目录下
install(TARGETS hello RUNTIME DESTINATION bin)

lib模块下的CmakeLists.txt

cmake_minimum_required(VERSION 2.6)

project(sub)

# SHARED表示生产动态库,STATIC表示生成静态库,默认生成静态库
add_library(sub SHARED sub.cpp)

文件结构

├── build
├── CMakeLists.txt
├── include
│   └── add.h
├── lib
│   ├── CMakeLists.txt
│   ├── sub.cpp
│   └── sub.h
├── main.cpp
└── src
    └── add.cpp

进行交叉编译

cmake_minimum_required(VERSION 2.8)
project(hello)

if(${CROSS_COMPILE})
    set(CMAKE_C_COMPILER arm-linux-gcc)
    set(CMAKE_CXX_COMPILER arm-linux-g++)
endif()
# 添加头文件路径
include_directories(include/ lib/)
# 添加模块
add_subdirectory(lib)
# 查找src目录下的源文件并添加到 SRC变量中
aux_source_directory(src SRC)

# 设置链接
link_libraries(sub)

# 指定编译后的程序名称,和相关代码文件
add_executable(hello main.cpp ${SRC})

# 指定安装规则,默认安装到/usr/local 目录下
install(TARGETS hello RUNTIME DESTINATION bin)

进入build目录,执行

cmake .. -DCROSS_COMPILE=true

即可生成支持arm-linux编译器的Makefile文件

注: 想要重新生成不带交叉编译的版本,只需删除build下的 CmakeCache.txt,或者 将true 改为false即可
在2.6的版本中Cmake 的if命令不支持true和false,改为1和0即可

最后,相关工程以防止到 码云上了 https://git.oschina.net/hivebc/cmake_hello

工欲善其事必先利其器 不能只做一个码农,多了解其背后原理更为重要。

© 著作权归作者所有

共有 人打赏支持
雨中人X
粉丝 8
博文 57
码字总数 15326
作品 0
深圳
高级程序员
私信 提问
Ubuntu上交叉编译opencv及opencv_contrib并移植到ARM板之一

零、环境准备: 编译环境:Ubuntu-14.04 交叉编译工具链:arm-linux-gnueabi-4.5.1 目标机器:粤嵌GEC210开发板S5PV210(Cortex-a8) opencv库:opencv-3.2.0(源码),解压至某一目录 open...

qq_30155503
2018/04/18
0
0
[Tools] [cmake] 调试笔记 --- cmake缓存引起的一个错误

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kris_fei/article/details/81983198 背景: 修改cmake交叉编译环境的时候本来想配置来改变编译工具和环境,但...

KrisFei
2018/08/23
0
0
四种环境下编译生成nanomsg库

VS2013编译生成nanomsg库文件 因为工作中用到了nanomsg,又需要编译成库来使用,发现网上资料很少,所以做此记录。 编译准备,CMake工具软件和下载好的nanomsg源码包。我的是CMake 3.6.2,n...

容我三思兮
2017/04/14
0
0
MySQL CMake参数说明手册

MySQL自5.5版本以后,就开始使用CMake编译工具了,因此,你在安装源文件中找不到configure文件是正常的。很多人下到了新版的MySQL,因为找不到configure文件,不知道该怎么继续下去。有没有一...

mac_zhao
2014/11/19
0
0
MySQL 5.5 编译安装

文章转自: http://www.orczhou.com/ 在5.5版本之后MySQL自动化建构工具从GUN Autotools换成了跨平台的Cmake系统,编译和配置和原来有些不同,这里做一个简单的小结。 1. 安装CMake Cmake是跨...

红薯
2011/07/06
970
3

没有更多内容

加载失败,请刷新页面

加载更多

MaxCompute,基于Serverless的高可用大数据服务

摘要:2019年1月18日,由阿里巴巴MaxCompute开发者社区和阿里云栖社区联合主办的“阿里云栖开发者沙龙大数据技术专场”走近北京联合大学,本次技术沙龙上,阿里巴巴高级技术专家吴永明为大家...

zhaowei121
10分钟前
1
0
记录一下安装使用MySql8.0以及允许Navicat11远程连接

记录一下安装使用MySql8.0以及允许Navicat11远程连接 2018年05月11日 23:51:39 爱不离此 阅读数:4455 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_352...

linjin200
11分钟前
1
0
redis结合springboot 无法注入redisTemplate问题

redis结合springboot 无法注入redisTemplate问题 报错: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.......

BraveLN
13分钟前
1
0
Redis缓存雪崩、缓存穿透、热点Key解决方案和分析

缓存穿透 缓存系统,按照KEY去查询VALUE,当KEY对应的VALUE一定不存在的时候并对KEY并发请求量很大的时候,就会对后端造成很大的压力。 (查询一个必然不存在的数据。比如文章表,查询一个不存...

watermelon11
14分钟前
1
0
ThinkSNS + 后端2019年1月更新播报

社交软件系统ThinkSNS+界面一览图 研发发布版本号:2.1.5 和 2.2.2 更新发布时间:2019年1月29日 社交系统ThinkSNS+后端本次主要更新内容:搜索地区体验优化、优化收藏页面排版、修正读取兑换...

ThinkSNS官方帐号
14分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部