CMake 学习笔记
- cmake
基本使用
1)初始文件:hello.c,CMakeList.txt
2)CMakeList.txt
1 | # CMake最低版本要求 |
3)cmake编译
1 | cmake . |
得到:CMakeFiles文件夹,CMakeCache.txt,cmake_install.cmake,Makefile
1 | make |
得到目标文件 hello
同目录多源文件编译
添加文件 test.c ,test.h ,test.h中的方法是对test.c中的函数方法的声明,hello.c引入test.h头文件,并调用头文件中的方法。
则,调整 CMakeList.txt 文件:
1 | # 在参数表中增加testFunc.c |
当需要编译的文件很多时,使用命令 aux_source_directory(< dir > < variable >)
将指定目录下所有源文件存储到一个变量中进行操作,可以避免大量手动罗列
1 | # 将当前所在目录下的所有源文件 . ,添加到 变量SRC_LIST中 |
不同目录多源文件编译
要编译的文件在不同目录下时,使用命令 include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
向工程添加多个指定头文件的搜索路径
1 | # 将头文件包含进工程 |
工程目录编译
include目录中是所有的.h头文件,src目录中是所有的.c源文件,build文件夹时编译文件夹
- [ ] 使用命令
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
来增加一个子目录进行编译,该文件夹下的CMakeLists.txt 负责编译该文件夹下的源码。source_dir选项指定了CMakeLists.txt源文件和代码文件的位置,binary_dir选项指定了输出文件的路径
1 | # 在build目录下增加src子目录进行编译,src中的CMakeLists.txt编译src中的源文件 |
在src目录下CMakeLists.txt中:
1 | aux_source_directory (. SRC_LIST) |
在build目录下 cmake
函数
find_package()
在一些目录中查找(按照CMake规则)文件,例如OpenCV,将找到的头文件目录设置到变量${OpenCV_INCLUDE_DIES}中,将链接库设置到 ${OpenCV_LIBS}中
查找方式:模块模式 / 配置模式
1. 模块模式:查找Find<package>.cmake文件(由CMAKE_MODULE_PATH 指定)
2. 配置模式:查找一个由待查找的包提供的配置文件的位置。包含该文件的路径被存储到 <package>_DIR的cache的条目里。
不管哪一种模式,只要找到包,就会定义变量
_ FOUND
INCLUDE DIRS 或者 _ INCLUDES
LIBRARIES 或者 LIBS
_ DEFINITIONS
find_package() + add_library() 得到库文件的绝对路径
link_directories()
指定第三方库所在路径,使得cmake搜索到动态库
target_link_libraries()
将目标文件与库文件进行连接
find_path() / find_library()
寻找头文件和库文件
CMake预定义的变量
CMAKE_CURRENT_SOURCE_DIR
当前处理的CMakeLists.txt所在的目录
CMAKE_CURRENT_LIST_DIR
当前正在处理的列表文件的目录