当前位置: 首页 > news >正文

cmake 添加头文件目录,链接动态、静态库(转载)

来源网址:http://www.cnblogs.com/binbinjx/p/5626916.html

罗列一下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

语法:

复制代码
A short-hand signature is:

find_library (<VAR> name1 [path1 path2 ...])
The general signature is:

find_library (
          <VAR>
          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(<target> [item1 [item2 [...]]]
                      [[debug|optimized|general] <item>] ...)
复制代码
# 以下写法都可以: 
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(<name> [WIN32] [MACOSX_BUNDLE]
               [EXCLUDE_FROM_ALL]
               source1 [source2 ...])

简单的例子如下:

add_executable(demo
        main.cpp
)

6. 最后贴一个完整的例子
复制代码
cmake_minimum_required (VERSION 2.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)
复制代码
 

转载于:https://www.cnblogs.com/wuchuanying/p/6700119.html

相关文章:

  • Phantomjs v.2.1 addCookie()始终返回错误
  • 在shell中编写函数
  • Gartner:自建大数据安全分析平台恐难逃失败厄运!
  • Linux A机器免密码SSH登录B机器
  • Python安装pandas
  • Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset
  • 洛谷 1330 封锁阳光大学
  • windows server 安装phpVirtualBox web服务
  • Cmake 使用和交叉编译配置
  • java基础理论 程序控制流程
  • H3C IRF原理及 配置
  • puppet自动化基础
  • 认识jQuery Mobile?
  • idea maven 创建webapp项目卡
  • ES5中新增的Array方法,IE8及以下不支持,解决办法,大神链接
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【刷算法】求1+2+3+...+n
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • es6
  • ES6之路之模块详解
  • JavaScript实现分页效果
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js作用域和this的理解
  • MaxCompute访问TableStore(OTS) 数据
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Redux 中间件分析
  • Spark RDD学习: aggregate函数
  • Travix是如何部署应用程序到Kubernetes上的
  • Vue 动态创建 component
  • 观察者模式实现非直接耦合
  • 经典排序算法及其 Java 实现
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端自动化解决方案
  • 如何选择开源的机器学习框架?
  • 一个完整Java Web项目背后的密码
  • ​如何防止网络攻击?
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • (12)目标检测_SSD基于pytorch搭建代码
  • (二)正点原子I.MX6ULL u-boot移植
  • (三分钟)速览传统边缘检测算子
  • (十)c52学习之旅-定时器实验
  • (转)程序员技术练级攻略
  • *** 2003
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .Net FrameWork总结
  • .NET 指南:抽象化实现的基类
  • .NET/C# 使窗口永不获得焦点
  • @converter 只能用mysql吗_python-MySQLConverter对象没有mysql-connector属性’...
  • @Resource和@Autowired的区别
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [BZOJ3223]文艺平衡树
  • [C++]18:set和map的使用
  • [C++核心编程](四):类和对象——封装