CMake笔记

CMake笔记

CMake语法

cmake_minimum_required( VERSION  3 )					# cmake版本要求
project( project_name )								    # 定义工程名

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 	# 添加c++11标准
														# set()用于设置变量
aux_source_directory(<dir> <variable>)					# 收集指定目录中所有源文件的名称,并将列表存储在提供的<variable>变量中

find_package( pkg_name VERSION REQUIED COMPONANT )	    # 找到已安装的包:
													    # 	程序会首先从/usr/local /usr中寻找pkg的cmake文件
												        # 对于已安装且只有头文件的库:
include_directories(/usr/include/eigen3” )					# 	如Eigen,可以直接包含头文件路径即可
include_directories( ${ pkg_name_INCLUDE_DIRS } )		# 对于找到的库,可以通过这样的方式引用其头文件和库路径

add_library( lib_name lib.cpp )							# 生成并添加静态库文件  .a
add_library( lib_shared_name SHARED lib_shared.cpp )	# 生成并添加共享库文件  .o

add_executable( pro_name exe.cpp )						# 添加可执行文件
target_link_libraries( pro_name lib_name ${ pkg_name_LIBS } )	# 向可执行文件添加库链接:
																# 	如果库通过此cmakelists文件生成,则需要先add_library()
																# 	如果库已经编译安装,则需要先find_package()

CMake小知识

find_package()

** find_package()
https://www.jianshu.com/p/39fc5e548310 深入理解find_package
https://blog.csdn.net/bytxl/article/details/50637277 find_package与CMake如何查找链接库详解
简单扯一下:find_package有两种模式(基本用法Module/完全用法Config)

* 0 默认是Module,当使用关键字CONFIG或NO_MODULE,亦或使用了非Module模式支持关键字,则转为Config。另外,按用户指定的配置却找不到包,就会自动进入Config模式,但使用MODULE关键字,则不转入Config
* 1 Module模式下,查找Find< PackageName >.cmake文件,先在CMAKE_MODULE_PATH变量对应的路径中查找。如果路径为空,或者路径中查找失败,则在cmake安装时的Modules目录,比如/usr/local/share/cmake/Modules查找
* 2 Config模式下,查找< PackageName >Config.cmake或< lower-case-package-name >-config.cmake。 < PackageName >_DIR为config模式特有,< PackageName >_DIR很傻,不会在子目录中寻找,有待验证(好像可以找?)。如果设置了< package >_DIR变量,但是它没有包含配置文件信息,那么CMake将会直接无视它,然后重新开始查找
* 3 module模式下,在find_package()前使用< PackageName >_DIR,并不能用来帮助find_package()找到包,并且在find_package()后,也并没有< PackageName >_DIR缓存变量自动存在。
* 4 配置文件*.cmake 记录包的各种文件路径信息,cmake文件的完整地址存储在cmake的变量< package >_CONFIG。可以通过list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules) 添加自定义模块路径
* 5 版本号问题

** find_package关键字

* REQUIRED 表示一定要找到包,找不到的话就立即停掉整个cmake
* COMPONENTS 查找的包中必须要找到的组件,如果有任何一个找不到就立即停掉整个cmake
* NAMES 其后的names参数会取代的角色,该命令会为每个在names中的name搜索名为Config.cmake或者<name全小写>-config.cmake的文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值