• Cmake


    关于 cmake

    1. cmake内置命令不区分大小写
    2. cmake内置变量区分大小写

    PROJECT

    • 属于内置命令

    用来指定工程名字和支持的语言

    PROJECT(hello C CXX)
    指定工程名字hello,支持语言c和c++,语言要大写
    
    • 1
    • 2

    该指令隐式定义了两个变量
    _BINARY_DIR,本例是HELLO_BINARY_DIR
    _SOURCE_DIR,本例是HELLO_SOURCE_DIR
    也就是前边部分是和工程名字绑定的,如果改变了工程名,用到这两个变量的地方都要修改,很麻烦。
    现在使用 PROJECT_BINARY_DIRPROJECT_SOURCE_DIR代替那两个
    补充:

    • PROJECT_BINARY_DIR = CMAKE_BINARY_DIR 为包含PROJECT命令最近一个CMakeLists.tst文件所在路径,一般是顶层文件所在的路径
    • PROJECT_SOURCE_DIR = CMAKE_SOURCE_DIR 为工程编译所在的路径,运行cmake的路径
    • CMAKE_CURRENT_SOURCE_DIR:当前正在处理的源目录的路径.

    SET

    • 属于内置命令

    设置显示指定变量

    SET(SRC t1.cpp t2.cpp t3.cpp  ... )
    
    • 1

    指的是SRC就包含了后边的所有东西,都用空格隔开

    MESSAGE

    • 属于内置命令

    向终端输出用户自定义信息

    • SEND_ERROR,产生错误,生成过程被跳过
    • STATUS,输出前缀为–的信息
    • FATAL_ERROR,立刻终止所有cmake过程
    MESSAGE(STATUS "向终端输出信息1"  "信息2")
    
    • 1

    ADD_EXECUTABLE

    • 属于内置命令

    生成可执行文件
    左边写可执行文件的名字,右边写依赖,一般是依赖.cpp文件

    ADD_EXECUTABLE(main main.cpp test.cpp)
    或者借助SET关键字中设置的变量引用取值也可以,是一个意思
    ADD_EXECUTABLE(main ${SRC})
    
    • 1
    • 2
    • 3

    工程名 PROJECT 和可执行文件名 ADD_EXECUTABLE

    没有任何关系

    语法基本原则

    • 读取变量中的内容:${var}
    • 指令:使用圆括号括起来的参数使用空格或者分号分割
    • 指令不区分大小写,但是括号内的变量区分大小写
    • 以SET指令为例,SET(src "m ain.cpp"),文件名需要双引号引起来的,也可以省略。当文件名存在空格时,必须加双引号

    内部构建和外部构建

    内部构建就是把所有的临时文件和工程文件放在同一目录下,不好区分,工程商一般使用外部构建
    外部构建:新建build目录,所有编译生成的文件都单独存放,不对源文件造成影响

    ADD_SUBDIRECTORY

    • 属于内置命令

    将src子目录添加到工程并指定编译输出路径为bin目录,他的作用告诉cmake我还有一个目录叫src,

    ADD_LIBRARY

    • 属于内置命令
    ADD_LIBRARY(hello SHARE main.cpp)
    
    • 1

    用来构建静态库或共享库

    • hello 静态库或动态库的名字

      共享库最终生成名字:lib + 库名 + .so = libhello.so
      静态库最终生成名字:lib + 库名 + .a = libhello.a

    • SHARE ,动态库;STATIC,静态库

    • main.cpp源文件,需要哪些文件去生成这个库

  • 相关阅读:
    11. 盛最多水的容器
    [羊城杯 2020]EasySer
    【原创】java+swing+mysql校园共享单车管理系统设计与实现
    什么是MQ和认识RabbitMQ
    Jetpack DataBinding使用--Jetpack系列
    764. 最大加号标志
    通讯录多版本代码归纳
    ubuntu安装debian包的命令dpkg和apt的详解
    【Java 进阶篇】Java Session 原理及快速入门
    怎样用好LinkedIn领英平台开发客户?
  • 原文地址:https://blog.csdn.net/weixin_45589030/article/details/126251928