(学习日记)2022.7.21

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


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


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

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

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

在这里插入图片描述

  1. 原因:
    vs版本不对

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

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



二、CMakeCMake指令——构建与编译

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

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



三、CMakeadd_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. ${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指令

四、CMakeadd_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. 三种错误可能:
  • 保留字 未大写
  • 保留字 拼写错误
  • 格式不对

链接:
cmake之采坑(一)



五、CMakeset——设置变量

  1. 设置各种变量

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



六、CMakeadd_custom_target——仅学习 依赖关系 和 默认执行

  1. 主要是学习 ALLDEPENDS
  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_BUILDPRE_LINK POST_BUILD
    PRE_BUILD为例,是在什么之前,这时就需要add_custom_targetDEPENDS来确定。
    例程如下:
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 操作。

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



七、题外话

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

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

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

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

  • 8
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YunB西风英

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值