43 编译原理及cmake使用手册学习
0 引言
大量开源库需要通过cmake编译后使用,了解cmake的基本指令以及CMakeLists.txt的写法非常重要,其基础是了解编译原理。另外,为了对cmake编译的代码进行调试,需要了解CMakeList.txt的写法。本文将对这些关键问题进行探讨,并记录一些关键点。
参考了如下链接。
https://blog.csdn.net/wzzfeitian/article/details/40963457/ # cmake使用示例与整理总结
https://cmake.org/cmake/help/v3.3/command/target_link_libraries.html # cmake official documentation
# cmake相关的教程
https://tuannguyen68.gitbooks.io/learning-cmake-a-beginner-s-guide/content/chap1/chap1.html
1 cmake编译原理 and install
1.1 cmake通过指定源文件、外部include文件、 静态链接库(.a/.lib)文件、动态链接库(.so/.dll)文件的路径,以及生成文件的路径,将整个程序有序地组织起来,最终达到生成可执行程序的目的。
1.2 在linux上编译并安装cmake
下载: https://cmake.org/files/v3.0/
编译安装: https://geeksww.com/tutorials/operating_systems/linux/installation/downloading_compiling_and_installing_cmake_on_linux.php
2 cmake commands(常用)
(1)cmake中的指令对大小写不敏感。 (2)PROJECT(project):工程名,一般采用最上层文件夹名 (3)ADD_SUBDIRECTORY(add_subdirectory):附加目录名,一般为src的目录,在文件比较多的时候采用 (4)LINK_DIRECTORIES (link_directories):静态链接库目录,供linker(链接器)使用 (5)ADD_EXECUTABLE (add_executable):可执行文件 (6)INCLUDE_DIRECTORIES(include_directories): .h头文件 (7)TARGET_LINK_LIBRARIES(target_link_libraries): .so文件,格式是 target_link_libraries(可执行文件名 链接库地址及文件) 写法为:以libboost_system.so.1.58.o 为例 “-lboost_system”
(8)FIND_PACKAGE(): FIND_PACKAGE(Lua51 REQUIRED)
3 cmake预定义变量
$PROJECT_SOURCE_DIR$ : 工程的根目录
$PROJECT_BINARY_DIR$ : 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build
4 cmake的CMakeLists.txt语法
4.1 常用变量的意义解释都有,链接如下。
https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables
how to use cmake?
$ mkdir build/
$ cd build
$ cmake ../
$ make
hint:
everytime you use cmake to do something, a CMakeCache.txt is generated and will have impact on file location it generated on next cmake. To make sure the behavior of cmake is as expected,
you should delete this CMakeCache.txt before a clean cmake build.
4.2 FIND_PACKAGE
https://cmake.org/cmake/help/latest/command/find_package.html#search-modes
目前,find_package有两种搜索模式
(1)module模式:在这种模式下,CMake会搜索一个叫Find<PackageName>.cmake的文件,这个文件通常在cmake的安装路径下,cmake/share/cmake-3.0/Modules/Find<PackageName>.cmake
(2)config 模式:在这种模式下,cmake会搜索一个叫<lowercasePackageName>-config.cmake 或者<PackageName>Config.cmake 的文件。等用到了再细化
5 cmake参数运用
(1)区分debug和release的方法:
点击Add Entry添加 Name: CMAKE_DEBUG_POSTFIX 、Type: STRING 、Value:-gd、Description:空