• cmake学习笔记


    cmake学习笔记

    一些问题

    • 除C/C++/JAVA外的语言不建议使用
    • 已有非常完备构建体系不建议使用
    • 若并不存在维护问题,没必要迁移至cmake
    • 每个目录需要一个CMakeLists.txt

    CMakeLists.txt 最基础结构

    注:<>包含的为替换名

    PROJECT (<project name>)
    ADD_EXECUTABLE(<execute name> <source file name>)
    

    示例:

    PROJECT(HELLO)
    ADD_EXECUTABLE(hello main.c)
    

    上方代码创建了一个名为"HELLO"的项目,生成可执行文件的名字定义为"hello",源文件输入只有一个"main.c"

    指令说明

    PROJECT

    PROJECT(<projectname> [CXX] [C] [Java])
    

    该语句可用于定义工程的名称

    SET

    SET(<variable name> [VALUE])
    

    用于显示定义变量

    MESSAGE

    MESSAGE([STATUS | SEND_ERROR | FATAL_ERROR] <message content>)
    

    用于输出自定义信息,不同类型对生成过程有影响:

    • STATUS 输出前缀为-,对生成无影响
    • SEND_ERROR 产生错误,跳过生成
    • FATAL_ERROR 立即终止所有cmake过程

    ADD_EXECUTABLE

    ADD_EXECUTABLE(<execute name> <source file>)
    

    execute name定义生成的可执行文件名字

    source file定义生成相关源文件

    基本语法规则

    1. 变量使用${}取值,IF语句中无需
    2. 指令(参数1 参数2 ...),多个参数用空格或分号分开
    3. 指令大小写无关,参数变量大小写相关。推荐指令使用大写

    一些疑惑

    cmake语法较为灵活

    举个例子:

    SET(SRC_LIST main.c)可以写成SET(SRC_LIST "main.c")

    两种写法没有区别,但若是文件名中包含空格,则必须使用第二种写法

    例:

    SET(SRC_LIST fo o.c)    // 错误
    SET(SRC_LIST "fo o.c")  // 正确
    

    若是使用第一种写法,cmake会认为参数是名为"fo"与"o.c"的两个文件,所以文件名尽量不要使用空格,使用下划线"_"作为连字符即可

    cmake还可以自动匹配,例如main.cpp文件,在参数中可只输入main,cmake会自动在目录中查找main.cmain.cpp
    当然最好不要偷这点懒,万一你真的有个叫main的文件肯定会让你对生成时的错误焦头烂额

    清理工作

    cmake的清理工作非常简单

    make clean
    

    内部构建与外部构建

    关于内部构建,本篇以上的内容都是内部构建,相信目录中生成一堆中间文件肯定让人感到烦杂,但能够使用外部构建,是我们跳出杂乱的文件夹

    外部构建的过程

    1. 创建一个build目录(顾名思义的名字比较清晰,但用别的也可以)
    2. 进入build目录,运行cmake <project directory>
    3. 运行make构建工程

    上述便是在Linux环境下的cmake外部构建,最大的好处就是不会弄乱源文件目录,中间文件与源文件混在一起可谓是相当糟糕的

  • 相关阅读:
    获取远程服务器的资源情况
    【Hibernate】Hibernate系列8之管理session
    【Hibernate】Hibernate系列7之二级缓存
    【Hibernate】Hibernate系列6之HQL查询
    【Hibernate】Hibernate系列5之检索策略
    【Hibernate】Hibernate系列4之配置文件详解
    【Hibernate】Hibernate系列3之配置文件详解
    【Hibernate】Hibernate系列2之Session详解
    【Hibernate】Hibernate系列1之概述
    【云计算】Dockerfile、镜像、容器快速入门
  • 原文地址:https://www.cnblogs.com/chilono/p/8735622.html
Copyright © 2020-2023  润新知