码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • (学习日记)2022.7.21


    写在前面:
    由于时间的不足与学习的碎片化,写博客变得有些奢侈。
    但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
    既然如此
    不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


    标题的结构如下:“类型”:“知识点”——“简短的解释”
    部分内容由于保密协议无法上传。


    点击此处进入学习日记的总目录

    2022.7.21

    • 一、`CMake`:系统找不到指定的文件——解决问题
    • 二、`CMake`:`CMake`指令——构建与编译
    • 三、`CMake`:`add_custom_command`——仅学习其中的复制命令
    • 四、`CMake`:`add_custom_command`不运行——解决问题
    • 五、`CMake`:`set`——设置变量
    • 六、`CMake`:`add_custom_target`——仅学习 依赖关系 和 默认执行
    • 七、题外话

    一、CMake:系统找不到指定的文件——解决问题

    Cmake Error at CMakeLists.txt:4 (project):
    Running
    'nmake' '-?'
    failed with:
    系统找不到指定的文件
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    1. 原因:
      vs版本不对

    2. 解决办法:
      去CMake里修改使用的vs版本。

    链接:
    【记】windows 安装cmake出现的一次问题



    二、CMake:CMake指令——构建与编译

    1. 在编写完CMakeList.txt后,进入它的根目录,在该目录的cmd中运行下面指令
    mkdir build
    cd build
    cmake ..
    cmake --build .
    cmake --install .
    
    • 1
    • 2
    • 3
    • 4
    • 5

    链接:
    CMake教程
    让程序编译更优雅的几个CMake命令



    三、CMake:add_custom_command——仅学习其中的复制命令

    1. TARGET:指定命令运行的目标,即CopyTask;
      COMMAND:指定要在构建时执行的命令行;
     ADD_EXECUTABLE(${CMAKE_PROJECT_NAME} ${DIR_SRCS})
     
     add_custom_target(CopyTask ALL DEPENDS ${CMAKE_PROJECT_NAME})
    
    add_custom_command(TARGET CopyTask
      POST_BUILD 
      COMMAND echo ${CMAKE_PROJECT_NAME}
      COMMAND ${CMAKE_COMMAND} -E copy_directory ${PATH}/3rd ${PATH}/build/src/Debug
    )
    
    #将 CopyTask 这个 target 依赖在 生成exe 这个进程上
    #使用POST_BUILD 方式达到 生成exe进程结束 即运行 CopyTask 操作。
    #PRE_BUILD - 命令将会在其他依赖项执行前执行
    #PRE_LINK - 命令将会在其他依赖项执行完后执行
    #POST_BUILD - 命令将会在目标构建完后执行。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    1. ${CMAKE_COMMAND}是CMake的路径。
      -E使CMake运行命令而不是构建。
      copy_directory是复制目录下所有文件,copy是复制指定文件。
      再后面两个就是目录,从前面的目录拷贝到后边的目录(如果使用copy,则是两个包含目录的文件)。

    链接:
    【CMake】cmake的add_custom_command和add_custom_target指令
    cmake整理:在编译时拷贝文件之add_custom_comand 和 add_custom_target
    【CMake】cmake的add_custom_command和add_custom_target指令

    四、CMake:add_custom_command不运行——解决问题

    CMake Error at CMakeLists.txt:26 (add_custom_command):
      add_custom_command Wrong syntax.  Unknown type of argument.
    
    -- Configuring incomplete, errors occurred!
    
    • 1
    • 2
    • 3
    • 4
    1. 三种错误可能:
    • 保留字 未大写
    • 保留字 拼写错误
    • 格式不对

    链接:
    cmake之采坑(一)



    五、CMake:set——设置变量

    1. 设置各种变量

    链接:
    Cmake入门之——Set方法(六)



    六、CMake:add_custom_target——仅学习 依赖关系 和 默认执行

    1. 主要是学习 ALL 和 DEPENDS
    2. ALL:在声明target的时候,可以加上ALL,这个target就会加入all target中,默认进行执行了。
    3. DEPENDS:target之间可以有依赖关系,A依赖B(A depends on B),意味着A的build,需要基于B 已经build完成。
      要实现A依赖B,则要在定义A的时候,加上DEPENDS B。
    4. 在之前说过,add_custom_command有三种运行方式,PRE_BUILD 、 PRE_LINK 和 POST_BUILD。
      以PRE_BUILD为例,是在什么之前,这时就需要add_custom_target的DEPENDS来确定。
      例程如下:
    ADD_EXECUTABLE(${CMAKE_PROJECT_NAME} ${DIR_SRCS})
    
    add_custom_target(CopyTask ALL DEPENDS ${CMAKE_PROJECT_NAME})
    
    add_custom_command(TARGET CopyTask
    POST_BUILD 
    COMMAND echo ${CMAKE_PROJECT_NAME}
    COMMAND ${CMAKE_COMMAND} -E copy_directory ${PATH}/3rd ${PATH}/build/src/Debug
    )
    
    #将 CopyTask 这个 target 依赖在 生成exe 这个进程上
    #使用POST_BUILD 方式达到 生成exe进程结束 即运行 CopyTask 操作。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    链接:
    CMake之add_custom_target
    cmake(二十七)Cmake中target再理解
    makefile中的target到底代表什么?



    七、题外话

    终于解决了,呜呜呜,今天的博客全部都是围着一个问题转——在CMake编译时将动态库复制到Debug文件夹中。

    这个问题的解决方式倒是不难,要实现编译时复制文件的功能 ,只需要add_custom_command 和 add_custom_target两个命令,add_custom_target 来确定运行顺序,add_custom_command实现复制功能。

    但对于我这个刚接触CMake两天的小白,属实有一种盲人摸象的感觉。我以为这两个函数功能是重复的,就在程序里要么有add_custom_targe,要么有add_custom_command,结果编译出来总是无法实现功能。

    虽然博客里记载的链接不多,但其实今天一共看了这些:
    在这里插入图片描述
    真的是知识如海,难题如山。学习新知识就像在山雾中前行,每一步都包含着对自己的怀疑,希望我们能够不畏艰难,在翻越一座座山时,提高自己的解题效率。

  • 相关阅读:
    【Flutter 面试题】如何理解Flutter中的Widget、State、Context ,他们是为了解决什么问题?
    广州穗雅口腔黏膜专科教你:如何辨别口腔溃疡的好坏
    JS--localStorage设置过期时间的方案(有示例)
    2023年智能轨道,交通与运输工程国际会议(ICSTTE 2023)
    离散数学 学习 之 递推方程和生成函数
    什么是容器
    Excel 学习笔记
    软件测试面试被问:你为何换工作、换专业学测试?
    Python学习小组课程-课程大纲与Python开发环境安装
    【VyOS-开源篇-3】- container for vyos 搭建 Halo 博客-vyos-开源篇
  • 原文地址:https://blog.csdn.net/qq_36769966/article/details/125906946
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号