文档章节

CMake交叉编译配置

linux服务器架构
 linux服务器架构
发布于 07/22 20:32
字数 620
阅读 13
收藏 0

罗列一下cmake常用的命令。

CMake支持大写、小写、混合大小写的命令。

 

1. 添加头文件目录INCLUDE_DIRECTORIES

语法:

include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])

它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用。

include_directories(../../../thirdparty/comm/include)

 

2. 添加需要链接的库文件目录LINK_DIRECTORIES

语法:

link_directories(directory1 directory2 ...)

它相当于g++命令的-L选项的作用,也相当于环境变量中增加LD_LIBRARY_PATH的路径的作用。

link_directories("/home/server/third/lib")

 

3. 查找库所在目录FIND_LIBRARY

语法:

Ashort-hand signature is:

find_library ( name1 [path1 path2 ...])

The general signature is:

find_library (

name | NAMES name1 [name2 ...] [NAMES_PER_DIR]

[HINTS path1 [path2 ... ENV var]]

[PATHS path1 [path2 ... ENV var]]

[PATH_SUFFIXES suffix1 [suffix2 ...]]

[DOC "cache documentation string"]

[NO_DEFAULT_PATH]

[NO_CMAKE_ENVIRONMENT_PATH]

[NO_CMAKE_PATH]

[NO_SYSTEM_ENVIRONMENT_PATH]

[NO_CMAKE_SYSTEM_PATH]

[CMAKE_FIND_ROOT_PATH_BOTH | ONLY_CMAKE_FIND_ROOT_PATH | NO_CMAKE_FIND_ROOT_PATH]

)

例子如下:

FIND_LIBRARY(RUNTIME_LIB rt /usr/lib /usr/local/lib NO_DEFAULT_PATH)

cmake会在目录中查找,如果所有目录中都没有,值RUNTIME_LIB就会被赋为NO_DEFAULT_PATH

 

4. 添加需要链接的库文件路径LINK_LIBRARIES

语法:

link_libraries(library1 <debug | optimized> library2 ...)

# 直接是全路径

link_libraries(“/home/server/third/lib/libcommon.a”)

# 下面的例子,只有库名,cmake会自动去所包含的目录搜索

link_libraries(iconv)

# 传入变量

link_libraries(${RUNTIME_LIB})

# 也可以链接多个

link_libraries("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")

可以链接一个,也可以多个,中间使用空格分隔.

 

5. 设置要链接的库文件的名称TARGET_LINK_LIBRARIES

语法:

target_link_libraries( [item1 [item2 [...]]] [[debug|optimized|general] ] ...)

# 以下写法都可以:

target_link_libraries(myProject comm) # 连接libhello.so库,默认优先链接动态库

target_link_libraries(myProject libcomm.a) # 显示指定链接静态库

target_link_libraries(myProject libcomm.so) # 显示指定链接动态库

# 再如:

target_link_libraries(myProject libcomm.so)  #这些库名写法都可以。

target_link_libraries(myProject comm)

target_link_libraries(myProject -lcomm)

6. 为工程生成目标文件

语法:

add_executable( [WIN32] [MACOSX_BUNDLE]

[EXCLUDE_FROM_ALL]

source1 [source2 ...])

简单的例子如下:

add_executable(demo

main.cpp)

另外顺便给大家推荐一个交流学习群:812--855--908

6. 最后贴一个完整的例子

cmake_minimum_required (VERSION2.6)

INCLUDE_DIRECTORIES(../../thirdparty/comm)

FIND_LIBRARY(COMM_LIB comm ../../thirdparty/comm/lib NO_DEFAULT_PATH)

FIND_LIBRARY(RUNTIME_LIB rt /usr/lib /usr/local/lib NO_DEFAULT_PATH)

link_libraries(${COMM_LIB} ${RUNTIME_LIB})

ADD_DEFINITIONS(-O3 -g -W -Wall

-Wunused-variable -Wunused-parameter -Wunused-function-Wunused

-Wno-deprecated -Woverloaded-virtual -Wwrite-strings

-D__WUR= -D_REENTRANT -D_FILE_OFFSET_BITS=64-DTIXML_USE_STL

)

add_library(lib_demo

cmd.cpp global.cpp md5.cpp)

link_libraries(lib_demo)

add_executable(demo

main.cpp)

# link library in static mode

target_link_libraries(demo libuuid.a)

另外,使用cmake生成makefile之后,make edit_cache可以编辑编译选项。

© 著作权归作者所有

linux服务器架构
粉丝 10
博文 73
码字总数 187971
作品 0
长沙
私信 提问
使用 cmake 进行交叉编译

使用 cmake 进行交叉编译 cmake 因为“又”要额外学一门语言而被诟病,但这并不妨碍越来越多私人项目用 cmake 来管理;autoconfig 确实是更好的发行工具,但用 cmake 管理项目显然更加的容易...

shzwork
06/11
41
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
用CMake代替makefile进行跨平台交叉编译

 在开始介绍如何使用CMake编译跨平台的静态库之前,先讲讲我在没有使用CMake之前所趟过的坑。因为很多开源的程序,比如png,都是自带编译脚本的。我们可以使用下列脚本来进行编译: 1 2 3 ...

shzwork
04/01
32
0
​​​​​​​opencv 移植到迅为IMX6开发板

OpenCV 是目前开源项目中最著名的基于机器视觉方向的图像处理的开发包,目前已经有被移植到嵌入式 Linux 环境上。本文介绍了 OpenCV 交叉编译的基本步骤。 一、编译环境及库文件 linux 环境:...

tb9204778_2012
08/14
37
0

没有更多内容

加载失败,请刷新页面

加载更多

redis 学习2

网站 启动 服务端 启动redis 服务端 在redis 安装目录下 src 里面 ./redis-server & 可以指定 配置文件或者端口 客户端 在 redis 的安装目录里面的 src 里面 ./redis-cli 可以指定 指定 连接...

之渊
昨天
2
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
昨天
4
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
昨天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
昨天
24
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部