CMakeLists.txt

本文介绍了CMake的基本使用,包括编译同级目录的源文件、处理多级和多文件夹时的CMakeLists.txt配置,以及最顶级目录中的先决条件设置。作者强调了CMake在项目管理和标准化编译过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

        首先,在我第一次接触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 文件

          

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

        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中的文件

               

               

        

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值