CMakeLists.txt

        关于这个东西,之前学过很多次(为啥用次呢,因为每次没找到合适的学习材料,最终导致恼火焦躁,容易陷入误区),现在做个记录

        首先,在我第一次接触CMake ,就感觉这个东西编译项目挺方便。但是,当打开文件后,真真的看不懂。所以去找官方材料(听信谗言,毕竟当时很久没学英语,水平有限,也不要用转换成中文的去看,没用的)

1、编译同级目录的源文件

        就是 CMakelists.txt 文件和源文件等在同一个文件夹中的时候,就这么几行,我们就可以编译了。会生成func 和stack 的两个可执行文件

这些命令的作用啥的网上很讲解的,就不多写了
cmake_minimum_required(VERSION 3.10)    #
set(CMAKE_CXX_STANDARD 11) #
project(Leetcode) #

add_executable(func func.c)
add_executable(stack stack.c)

2、编译多级和多文件夹时

        创建最顶级的CMakeLists.txt  文件(这里也有些问题,就是我们使用Cmake,就一定涉及到了多文件,多文件夹的问题,比如include,source文件,bin文件等等。这里先以source和bin来说 )

cmake_minimum_required(VERSION 3.10)    #
set(CMAKE_CXX_STANDARD 11) #

project(Leetcode) #

message(STATUS "THIS IS BINARY directory" ${Leetcode_BINARY_DIR})
message(STATUS "THIS IS SOURCE directory" ${Leetcode_SOURCE_DIR})

add_subdirectory(source bin)# source 是源文件的子目录,bin是存放二进制文件的
//源文件的路径,就是source  ,从中获取源文件;  bin路径表示会将编译过程产生的二进制文件存到这里

一、最顶级的目录中需要设定好一些先决条件

        为啥要这么做呢,

          cmake管理项目,我自己用起来感觉它的特征,就是使用一个最顶级的CMakeLists.txt 去管理其他分目录的CMakelists.txt (这就会出现另外一个问题,编译的时候,不可能每个文件夹里都去设定一次版本号,工程名什么的)

        所以使用add_subdiretory可以建立和其他文件中CmakeLists.txt 的联系,让它可以找到其他文件夹中的CMakeList.txt。

        (这里也包括其他的,比如添加其他的头文件目录的时候include_directories(),这些命令不可能在源文件所在的CMakeLists.txt中写进去,不然就太麻烦了)

下面是截图示例

        比如图中和bin等文件夹同级的CMakelists.txt 文件

          CMakeLists.txt_第1张图片

        下面用#号表示哪一行是必须的内容

        1、需要先定义cmake的版本:

         第一个#号 示例 使用 最好以后都加上VERSION这个关键词。(网上各种版本都有,之前看着每个版本写不写version的都不一样,最好都写上)

        2、需要设置编译器的版本,

           这个还是要有的,下图是以C++11为例,第二个#号行。

        3、设定项目工程的 名字

          找了很多材料,没有发现这东西的内部实现到底是什么方式。而且,也不会在项目中生成对应名字的文件夹。但是有一些CMake用到的语法变量需要使用工程名字,保证是本工程的信息。类似message那两行。

        实际上cmake 系统本身预定义了 PROJECT_BINARY_DIR 和PROJECT_SOURCE_DIR 变量,(PROJECT可以替换,自己测试时改成了Leetcode,也可以直接用预定义的,这样就不用在修改工程名的时候修改这些琐碎的内容)

        4、至于第四个#号,使用的是add_subdirectory()  上面有写是做什么的。这个函数还有别的参数,但是目前用不到,暂时先一步步来写

        总体感觉这个最顶级的有点像是一个宏观的处理管理方案,其他的细节分支部分怎么处理,需要对应的方案,比如下面的source中文件的设置

        6、下图就是source中的文件

               CMakeLists.txt_第2张图片

               

        

        因为需要生成不同的可执行文件 直接使用这个命令,添加后,就会直接生成到bin文件中了,生成哪个写哪个就行。

很多东西都需要用语法和变量什么的去简化让它更通用,以达到高效修改和添加、检查的目的,只是一些基础的内容。目前刚学了python基础,准备用python的方法去获取股票信息试试。比较有意思

你可能感兴趣的:(linux,运维,服务器)