赞
踩
一 CMakeLists.txt和cmake脚本的联系和区别
① cmake脚本
- (1) cmake文件里面通常是'什么信息(information)'
-
- -- '.cmake文件'里包含了一些"公共(复用)"的'cmake命令'和一些'宏|函数'
-
- -- 当CMakeLists.txt'包含该.cmake文件'时,当'编译'运行时,该.cmake里的一些命令就会在该'包含处'得到加载'执行',在'后续'能够'调用该.cmake里'的一些宏和函数
-
- -- .cmake文件是一个'模块(module)文件',可以被'include'到CMakeLists.txt中
-
- 备注: cmake'脚本'不要包含'工程之类'的信息 -->例如:add_subdirectory()、CMAKE_CURRENT_之类的
-
- 最佳实践: cmake'不要'调用CMakeLists.txt
-
- (2) .cmake模块文件被'加载的时机' -->'CMakeLists.txt'
-
- -- @1: include(module_name.|file)
-
- -- @2: find_package(module_name)
-
- 备注: 这两种'加载'方式有'区别'的,或者说find_package中'.cmake全文件名'有一定的要求
② CMakeLists.txt
- (1) CmakeLists.txt才是cmake的'正统'文件
-
- (2) 执行cmake 命令时候,会'自动加载'对应'路径'下的CMakeLists.txt文件-->'一般时项目根路经下'
-
- eg: cmake .. -->加载'上级目录下'的CMakeLists.txt文件 -->'out of build常见的场景'
-
- (3) CMakeLists.txt通过'add_subdirectory(dir)' -->'自动加载'该目录下的'CMakeLists.txt'文件
二 include指令
(1)基础
① 官方帮助文档
- +++++++++++'普通(file)文件'+++++++++++
-
- 1)如果是'相对'路径,是'相对于'include指令所在的'CMakeLists.txt'的路径
-
- 2)'绝对'路径-->'建议'
-
- 一般我们会将'cmake'文件放到cmake目录下,所以'前缀'一般是: CMAKE_CURRENT_SOURCE_DIR/cmake/
-
- 备注: 这里的'file'文件,必须以'.cmake'结尾
-
- +++++++++++'模块(module)文件'+++++++++++
-
- 1)首先搜索'Cmake builtin module directory' -->'cmake 内置的module目录'-->'centos7 /usr/share/cmake/MOdules/'
-
- 2)找不到'再搜索'-->'CMAKE_MODULE_PATH'
-
- 3)再找不到,则'报错'-->'NOTFOUND'
-
- 强调:如果非'.cmake'结尾的文件表示是'module'-->会自动查找'内建-->CMAKE_MODULE_PATH'路径下的"module_name.cmake"文件
- include(src/CMakeLists.txt) -->cmake也可以这样做,但是相对'add_subdirectory(src)',我们'不推荐'前者
-
- 原因: include破坏了'Build Tree'的机制-->不能将'Source Tree'在'build'下'映射'成'Build Tree'
(2)实践
① 项目结构
② CMakeLists.txt文件
③ 测试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。