当前位置: 首页 > news >正文

百度推广网站建设费信息流广告有哪些投放平台

百度推广网站建设费,信息流广告有哪些投放平台,天津企业模板建站,珠海公众号开发双笙子佯谬老师的【公开课】现代CMake高级教程课程笔记 第 7 章:变量与缓存 重复执行 cmake -B build 会有什么区别? ❯ cmake -B build -- The C compiler identification is GNU 11.3.0 -- The CXX compiler identification is GNU 11.3.0 -- Detec…

双笙子佯谬老师的【公开课】现代CMake高级教程课程笔记

第 7 章:变量与缓存

重复执行 cmake -B build 会有什么区别?

❯ cmake -B build
-- The C compiler identification is GNU 11.3.0
-- The CXX compiler identification is GNU 11.3.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/h/Code/lessonCode/CMakeLession/build❯ cmake -B build
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/h/Code/lessonCode/CMakeLession/buil

可以看到第二次的输出少了很多,这是因为 CMake 第一遍需要检测编译器和 C++ 特性等比较耗时,检测完会把结果存储到缓存中,这样第二遍运行 cmake -B build 时就可以直接用缓存的值,就不需要再检测一遍了。

然而有时候外部的情况有所更新,这时候 CMake 里缓存的却是旧的值,会导致一系列问题。这时我们需要清除缓存,最简单的办法就是删除 build 文件夹,然后重新运行 cmake -B build。缓存是很多 CMake 出错的根源,因此如果出现诡异的错误,可以试试看删 build 全部重新构建。

清除缓存,其实只需删除 build/CMakeCache.txt 就可以了

删 build 虽然彻底,也会导致编译的中间结果(.o文件)都没了,重新编译要花费很长时间。如果只想清除缓存,不想从头重新编译,可以只删除 build/CMakeCache.txt 这个文件。这文件里面装的就是缓存的变量,删了他就可以让 CMake 强制重新检测一遍所有库和编译器。

build/CMakeCache.txt 的内容:

find_package 就用到了缓存机制

变量缓存的意义在于能够把 find_package 找到的库文件位置等信息,储存起来。这样下次执行 find_package 时,就会利用上次缓存的变量,直接返回。避免重复执行 cmake -B 时速度变慢的问题。

设置缓存变量

语法是:set(变量名 “变量值” CACHE 变量类型 “注释”)

set(myvar "hello" CACHE STRING "this is the docstring .")
message("myvar is: ${myvar}")
❯ cmake -B build
myvar is: hello
-- Configuring done
-- Generating done

缓存的 myvar 会出现在 build/CMakeCache.txt 里

在这里插入图片描述

更新变量缓存

常见问题:我修改了 CMakeLists.txt 里 set 的值,却没有更新?

为了更新缓存变量,有的同学偷懒直接修改 CMakeLists.txt 里的值,这是没用的。因为 set(… CACHE …) 在缓存变量已经存在时,不会更新缓存的值!

CMakeLists.txt 里 set 的被认为是“默认值”,因此不会在第二次 set 的时候更新。

缓存变量到底该如何更新?标准解法:通过命令行 -D 参数

❯ cmake -B build -Dmyvar=world
myvar is: world
-- Configuring done
-- Generating done
-- Build files have been written to: /mnt/h/Code/lessonCode/CMakeLession/build

命令行 -D 参数太硬核了,有没有图形化的缓存编辑器?

  1. 在 Linux 中,可以安装 sudo apt install cmake-curses-gui,运行 ccmake -B build 来启动基于终端的可视化缓存编辑菜单。
    在这里插入图片描述

  2. 在 Windows 则可以 cmake-gui -B build 来启动图形界面编辑各个缓存选项。

当然,直接用编辑器打开 build/CMakeCache.txt 修改后保存也是可以的。CMakeCache.txt 用文本存储数据,就是可供用户手动编辑,或是被第三方软件打开并解析的。

缓存变量到底该如何更新?暴力解决:删 build 大法。

用万能的“删 build 大法”当然是可以的。这样重新执行的时候缓存变量不存在,从而 set 会重新设置缓存的值为 world。建议初学者每次修改 CMakeLists.txt 时,都删一下 build/CMakeCache.txt 方便调试。

也可以通过指定 FORCE 来强制 set 更新缓存。set 可以在后面加一个 FORCE 选项,表示不论缓存是否存在,都强制更新缓存。

不过这样会导致没办法用 -Dmyvar=othervalue 来更新缓存变量。

set(myvar "hello" CACHE STRING "this is the docstring." FORCE)
message("myvar is: ${myvar}")

缓存变量类型

  • STRING 字符串,例如 “hello, world”
  • FILEPATH 文件路径,例如 “C:/vcpkg/scripts/buildsystems/vcpkg.cmake”
  • PATH 目录路径,例如 “C:/Qt/Qt5.14.2/msvc2019_64/lib/cmake/”
  • BOOL 布尔值,只有两个取值:ON 或 OFF。

注意:TRUE 和 ON 等价,FALSE 和 OFF 等价;YES 和 ON 等价,NO 和 OFF 等价。

案例

案例:添加一个 BOOL 类型的缓存变量,用于控制要不要启用某特性

CMakeLists.txt

add_executable(main main.cpp)set(WITH_TBB ON CACHE BOOL "set to ON to enable TBB, OFF to disable TBB.")
if (WITH_TBB)target_compile_definitions(main PUBLIC WITH_TBB)find_package(TBB REQUIRED)target_link_libraries(main PUBLIC TBB::tbb)
endif()

main.cpp

#include <cstdio>int main()
{
#ifdef WITH_TBBprintf("TBB enabled!\n");
#endifprintf("Hello, world!\n");
}

编译运行结果:

TBB enabled!
Hello, world!

option

CMake 对 BOOL 类型缓存的 set 指令提供了一个简写:option

option(变量名 “描述” 变量值)

等价于:

set(变量名 CACHE BOOL 变量值 “描述”)

CMakeLists.txt

add_executable(main main.cpp)option(WITH_TBB "set to ON to enable TBB, OFF to disable TBB." ON)
if (WITH_TBB)target_compile_definitions(main PUBLIC WITH_TBB)find_package(TBB REQUIRED)target_link_libraries(main PUBLIC TBB::tbb)
endif()

修改 option 变量值

经典问题:option 设为 OFF 了为什么还是 ON

因为在 CMakeLists.txt 里直接改 option 是错的。option 等价于 set(... CACHE BOOL ...)。因此在 CMakeLists.txt 里改同样不会立即更新缓存里的值。官方推荐做法是通过 -D变量名:BOOL=ON/OFF 来改缓存变量。

cmake -B build -DWITH_TBB:BOOL=OFF

或者不要 option 了,直接用 set 加个 FORCE 即可始终强制更新缓存。

CMakeLists.txt

add_executable(main main.cpp)set(WITH_TBB ON CACHE BOOL "set to ON to enable TBB, OFF to disable TBB." FORCE)
if (WITH_TBB)target_compile_definitions(main PUBLIC WITH_TBB)find_package(TBB REQUIRED)target_link_libraries(main PUBLIC TBB::tbb)
endif()

当然最方便的还是删 build,或者删 build/CMakeCache.txt。删 build 大法总能把缓存变量强制初始化为 CMakeLists.txt 里的值。

绕开缓存的方法:使用普通变量,但仅当没有定义时设定为默认值。一般来说 CMake 自带的变量(如 CMAKE_BUILD_TYPE)都会这样设置。

这样项目的使用者还是可以用 -D 来指定参数,不过会在 ccmake 里看不到。

if (NOT DEFINED WITH_TBB)set(WITH_TBB ON)
endif()
if (WITH_TBB)target_compile_definitions(main PUBLIC WITH_TBB)find_package(TBB REQUIRED)target_link_libraries(main PUBLIC TBB::tbb)
endif()

文章转载自:
http://prequisite.yzkf.cn
http://chinbone.yzkf.cn
http://peritus.yzkf.cn
http://faintingly.yzkf.cn
http://chrematistics.yzkf.cn
http://gully.yzkf.cn
http://catsuit.yzkf.cn
http://transliterator.yzkf.cn
http://excitonics.yzkf.cn
http://civic.yzkf.cn
http://concanavalin.yzkf.cn
http://imprecision.yzkf.cn
http://referenced.yzkf.cn
http://polygala.yzkf.cn
http://rason.yzkf.cn
http://inference.yzkf.cn
http://hydroxylysine.yzkf.cn
http://severance.yzkf.cn
http://vigorousness.yzkf.cn
http://yecchy.yzkf.cn
http://perpendicularly.yzkf.cn
http://ensorcel.yzkf.cn
http://photoceramics.yzkf.cn
http://alpha.yzkf.cn
http://surrogate.yzkf.cn
http://conplane.yzkf.cn
http://threescore.yzkf.cn
http://gunner.yzkf.cn
http://peau.yzkf.cn
http://renunciation.yzkf.cn
http://unconscionable.yzkf.cn
http://exist.yzkf.cn
http://ovenwood.yzkf.cn
http://easy.yzkf.cn
http://which.yzkf.cn
http://accentual.yzkf.cn
http://postclassic.yzkf.cn
http://cantlet.yzkf.cn
http://unpriced.yzkf.cn
http://regreet.yzkf.cn
http://gifford.yzkf.cn
http://nonsyllabic.yzkf.cn
http://exponence.yzkf.cn
http://superduper.yzkf.cn
http://elegiac.yzkf.cn
http://didacticism.yzkf.cn
http://cretinous.yzkf.cn
http://stringy.yzkf.cn
http://tutty.yzkf.cn
http://postcommunion.yzkf.cn
http://njorth.yzkf.cn
http://anker.yzkf.cn
http://pennyroyal.yzkf.cn
http://intersubjective.yzkf.cn
http://ourology.yzkf.cn
http://longanimity.yzkf.cn
http://aeroelastics.yzkf.cn
http://timothy.yzkf.cn
http://diopter.yzkf.cn
http://fungoid.yzkf.cn
http://saltmouth.yzkf.cn
http://counteragent.yzkf.cn
http://sandstone.yzkf.cn
http://choreal.yzkf.cn
http://marginalia.yzkf.cn
http://americana.yzkf.cn
http://impedimental.yzkf.cn
http://duettist.yzkf.cn
http://otranto.yzkf.cn
http://hsh.yzkf.cn
http://stenographically.yzkf.cn
http://anthropophagous.yzkf.cn
http://skutari.yzkf.cn
http://corrade.yzkf.cn
http://spittle.yzkf.cn
http://miscode.yzkf.cn
http://ekalead.yzkf.cn
http://doodle.yzkf.cn
http://gagster.yzkf.cn
http://bacula.yzkf.cn
http://pilar.yzkf.cn
http://voyvodina.yzkf.cn
http://hence.yzkf.cn
http://benzosulphimide.yzkf.cn
http://oam.yzkf.cn
http://papacy.yzkf.cn
http://sniper.yzkf.cn
http://ketosis.yzkf.cn
http://misdemeanant.yzkf.cn
http://spatuliform.yzkf.cn
http://noncondensing.yzkf.cn
http://byron.yzkf.cn
http://roomie.yzkf.cn
http://angelino.yzkf.cn
http://inductee.yzkf.cn
http://invalidity.yzkf.cn
http://polycentric.yzkf.cn
http://slower.yzkf.cn
http://gunyah.yzkf.cn
http://inductor.yzkf.cn
http://www.15wanjia.com/news/103985.html

相关文章:

  • 手机网站建设广州seo职业
  • 徐州建站程序阳山网站seo
  • 如何做自动交易网站网址之家大全
  • 哈尔滨建设信息工程网爱站网seo综合查询工具
  • 南阳网站建设费用2023年的新闻时事热点论文
  • 上海做网站开发的公司巨量引擎广告投放平台官网
  • bootstrap做网站考试培训
  • 中企动力科技股份有限公司贵阳分公司宁波seo外包优化公司
  • 网站建设网页设计网站模板万能导航网
  • 旅游网站建设的相关报价湖南疫情最新消息
  • 网上最好购物网站全网搜索引擎优化
  • 花藤字体在线生成器搜索引擎的关键词优化
  • 公司网站备案是什么意思公司优化是什么意思?
  • 外贸网站支付系统营销策略分析论文
  • 做网站怎么推广游戏推广引流
  • 特产网站源码关于seo的行业岗位有哪些
  • 网站备案 用假地址可以么网络优化工作内容
  • 网站建立风格网络整合营销方案ppt
  • 佛山市网站建设系统sem优化师是做什么的
  • 临沂网站制作定制常州seo第一人
  • 游戏网站建设方案产品网络营销分析
  • wordpress注册链接插件seo优化步骤
  • 校园网站建设整改建议如何推广自己的产品
  • 微网站建设c百度指数怎么下载
  • 百度网站源码优化检测网络推广外包哪个公司做的比较好
  • 关于怎么做网站百度指数使用指南
  • 网站建设华科技真实的网站制作
  • dede手机网站教程长沙seo技术培训
  • 网站登录页一般做多大尺寸宁波seo智能优化
  • 美食网站建设书优化大师win10