cmake 学习记录

背景:一直他妈的不会cmake,然后很多时候建立新环境运行不起来,很烦

终于有一小段时间,算是闲里偷忙来学一下

就是根据官方的文档来学的,它不是有很多的练习嘛,挨个做了一遍

各个地址:

cmake的总链接:https://cmake.org/cmake/help/latest/

练习题的内容:https://cmake.org/cmake/help/latest/guide/tutorial/index.html

开始吧:

1. 首先熟悉最基本的几个命令:

cmake

 与 CMakeLists.txt配套,通过 cmake 命令将 CMakeLinks.txt翻译为能被make命令使用的makefile.txt文件

因此,cmake在执行命令的时候,需要

为 包含CMakeLists.txt 的路径

make 与 makefile.txt文件配套,是用于编译链接各个.c .o .h 文件的

因此,make在执行命令的时候,需要与makefile.txt 在同一路径中

补充:

(1)cmake 也有通过makefile.txt编译链接的能力,执行 cmake --build

  命令就可以,就是makefile.txt的路径

(2)cmake -S . -B ./build  指令
    -S 就是在指定 CMakeLists.txt文件和要build的源代码文件在哪里 
        【我猜测】:就是add_executable(Tutorial tutorial.cxx)中的 tutorial.cxx 文件的位置
    -B 的含义是指定将 buildtree 的路径放在哪里, 
        build tree 含义是:包括 CMakeCache.txt文件的位值,若 不使用 -B 特殊指定那么就会生成在当前pwd的目录下
        若 -B 后的路径不存在,那么会先新建路经然后再向该路径中存放对应得内容
        (若 build目录存在就直接使用build中的CMakeCache.txt文件链,因此,为了避免出错,建议直接 rm -rf build)

若在指令中不显示地指定 -S -B ,直接写为  `cmake ..` 
                           那么,这个命令的含义就是: source tree 的路径是 `..` 
                           因为,当 -S -B 全省略时,指令退化为 ‵cmake src‵

接着,可以使用 `make`命令 或 `cmake --build

`命令 to build the project      
    若使用 `cmake --build ` 命令,那么,‵--build‵ 命令必须放在参数的最开始


(3)可以并行编译:`cmake --build

-j []`        
                    例如: `cmake --build . -j 4 `

当我看不懂一个东西的时候,我应该继续,还是应该速速看别人的博客来回理解呢?

我打算采取的策略是,看别人的博客吧

还有一个疑问是:一些关键字的含义都他妈的是看明白的阿,以及,别说是看明白了,我他嘛有时候都不知道这些关键字的存在,不是我靠,这些关键字都从哪里列出来的阿????

 

 引入指定的头文件:

使用 target_include_directories(Tutorial PUBLIC "

") 函数 引入要链接的 .h文件

使用方法:

先add_executable(Tutorial tutorial.cxx)

再 target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}")

注意 :

target_include_directories(<目标可执行文件名字> "

")

这个用法:第三个参数可以有多种写法:

目前的感受是:第三个参数的内容应该是 包含.h文件所在的路径

由于我们在build文件夹下执行的各个命令,因此,生成的二进制文件的位置在不使用set(PROJECT_BINARY_DIR "

") 指明的时候,就会存放在当前文件夹位置处

而可行的2个变量 ${PROJECT_BINARY_DIR}" ${CMAKE_CURRENT_BINARY_DIR}的含义分别是:该文件二进制内容所在路径 或 当前执行CMAKE后生成的二进制文件的位置,因此都是可行的

担心的话,可以使用 message("  ${XXXXXXXXXX}  ") 输出一下

存在几个问题:

1.在add_executable()函数上不能直接用嘛

2. 和 add_dirctionary区别?

你可能感兴趣的:(学习)