<<Modern CMake>> 翻译 2.2 CMake 编程】的更多相关文章

<<Modern CMake>> 翻译 2.2 CMake 编程 流程控制 CMake有一个 if 语句, 经年累月之后,现在它已经相当复杂. 您可以在 if 语句中使用全大写字母书写一系列关键字,并且您通常可以直接通过名称(if语句在历史上出现早于变量扩展)或使用 ${} 语法来引用变量. 下面是 if 语句的示例: if(variable) # If variable is `ON`, `YES`, `TRUE`, `Y`, or non zero number else()…
<<Modern CMake>> 翻译 2. CMake 基础 最低版本 这是每个 CMakeLists.txt 文件的第一行.CMakeLists.txt 是 CMake 所需的配置文件名称: cmake_minimum_required(VERSION 3.1) 我们来了解一点 CMake 语法. 命令名称 cmake_minimum_required 不区分大小写,因此通常的做法是使用小写.1 这里 VERSION 是该命令所需的特殊关键字. 版本号紧跟在 VERSION 关…
<<Modern CMake>> 翻译 1. CMake 介绍 人们喜欢讨厌构建系统. 仅仅观看 CppCon17 上的演讲,就可以看到开发人员因为构建系统而闹笑话的例子. 这让我们思考一个问题:为什么会这样? 构建系统时当然不可能完美无缺. 但我认为,在 2018 年,我们可以很好地解决其中的一些问题. 这就是 CMake.不过 CMake 2.8 可能不行; 它在 C++11 发布之前就 release 了! 对于 CMake 来说也没有可怕的例子(甚至那些发布在 KitWar…
<<Modern CMake>> 翻译 2.3 与代码通信 配置文件 CMake 允许您使用代码通过 configure_file 存取 CMake 变量. 此命令复制一个文件,通常是把 .in后缀文件从一个地方拷贝到另一个地方,替换其中的所有 CMake 变量. 如果你想避免将你的输入文件中现有的 ${} 进行替换,可以使用 @ONLY 关键字. 也有一个 COPY_ONLY 关键字,可以在你只是替代 file(COPY 时使用. 此功能使用非常频繁; 例如,在 Version.…
<<Modern CMake>> 翻译 2.4 项目目录结构 本节内容有点跑题.但我认为这是一个很好的方法. 我将告诉你如何规划项目的目录. 这是基于惯例,但将帮助您: 轻松阅读其他按照相同模式的项目, 避免导致冲突的模式, 避免混淆和使构建变得复杂. 首先,如果您的项目被叫做 project,包含一个链接库叫做 lib,一个可执行文件叫做 app, 那么您的文件目录应该类似以下结构: - project - .gitignore - README.md - LICENCE.md…
/*********************************************************** 关于书: 书是我从网上找到的effective Modern C++的样章,内容只到条款4就没有了, 所以现阶段我只能翻译到条款4,不过以后有机会我会继续翻译的. 如果读者找到了完整的版本,欢迎大家发给我.1021842556@qq.com effective Modern C++的样章的下载地址http://pan.baidu.com/s/1ntKBlpf 提取密码是upk…
在安装mysql 5.5.xx 时运行cmake命令是出现CMake Error: The source directory does not appear to contain CMakeLists.txt.的错误,刚開始以为是cmake版本号有问题,到最后才发现是当前文件夹错了. 在运行cmake时没有切换到mysql的源代码文件夹导致了这个错误,切换到mysql的源代码文件夹又一次运行cmake命令就可以. 下面的命令在解压后的文件夹内运行下面命令: cmake \  -DCMAKE_IN…
note 有时候,可能使用的cmake语法 与cmake的版本有关系, 比如modern cmake. 这时候我们可以在 CMAKELISTS.TXT中 判断 cmakeLists.txt 代码 if (${CMAKE_VERSION} VERSION_LESS 3.18) message("cmake version is less than 3.18") else() message("cmake version is greater than 3.17") e…
cmake source install as follows: 0 cd ~ 1 wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz 2 tar xvf cmake-3.5.2.tar.gz This worked for me  then: 3 cd cmake-3.4.3 4 ./bootstrap --prefix=/usr 这一步很关键,如果没有指定prefix,后面使用时会报错Could not find CMAKE_ROOT 5…
> 本文是我翻译<JavaScript Concurrency>书籍的第一章,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践.完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. JavaScript并不是一门与并发有关联的语言.事实上,…
本文是我翻译<JavaScript Concurrency>书籍的第五章 使用Web Workers,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践. 完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. Web workers在Web浏览器中…
本文是我翻译<JavaScript Concurrency>书籍的第七章 抽取并发逻辑,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践. 完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. 到本书这里,我们已经在代码中明确地模拟了并发问题.使…
本文是我翻译<JavaScript Concurrency>书籍的第六章 实用的并发,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践. 完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. 在上一章中,我们大致学习了Web workers的基本…
本文是我翻译<JavaScript Concurrency>书籍的第四章 使用Generators实现惰性计算,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践. 完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. 惰性计算是一种编程技术,它用…
本文是我翻译<JavaScript Concurrency>书籍的第三章 使用Promises实现同步,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践. 完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. Promises几年前就在JavaS…
本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践. 完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. 本书第一章我们探讨了JavaScri…
CMake常用命令 PROJECT PROJECT(projectname [CXX] [C] [Java]) 指定工程名称,并可指定工程支持的语言.支持语言列表可忽略,默认支持所有语言 SET SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]]) 定义变量(可以定义多个VALUE,如SET(SRC_LIST main.c util.c reactor.c)) MESSAGE MESSAGE([SEND_ERROR | STATUS | FA…
第一章 类型推导 C++98有一套单一的类型推导的规则:用来推导函数模板,C++11轻微的修改了这些规则并且增加了两个,一个用于auto,一个用于decltype,接着C++14扩展了auto和decltype可以使用的语境,类型推导的普遍应用将程序员从必须拼写那些显然的,多余的类型的暴政中解放了出来,它使得C++开发的软件更有弹性,因为在某处改变一个类型会自动的通过类型推导传播到其他的地方. 然而,它可能使产生的代码更难观察,因为编译器推导出的类型可能不像我们想的那样显而易见. 想要在现代C+…
条款4:了解如何观察推导出的类型 那些想要知道编译器推导出的类型的人通常分为两种,第一种是实用主义者,他们的动力通常来自于软件产生的问题(例如他们还在调试解决中),他们利用编译器进行寻找,并相信这个能帮他们找到问题的源头(they’re looking for insights into compilation that can help them identify the source of the problem.).另一种是经验主义者,他们探索条款1-3所描述的推导规则,并且从大量的推导情…
    在概念上说,auto关键字和它看起来一样简单,但是事实上,它要更微妙一些的.使用auto会让你在声明变量时省略掉类型,同时也会防止了手动类型声明带来的正确性和性能上的困扰:虽然按照语言预先定义的规则,一些auto类型推导的结果,在程序员的视角来看却是难以接受的,在这种情况下,知道auto是如何推导答案便是非常重要的事情,因为在所有可选方法中,你可能会回归到手动的类型声明上(because falling back on manual type declarations is an alt…
条款6:当auto推导出意外的类型时,使用显式的类型初始化语义 条款5解释了使用auto来声明变量比使用精确的类型声明多了了很多的技术优势,但有的时候,当你想要zag的时候,auto可能会推导出了zig.例如,我有一个函数,它以const Widget&作为参数,并且返回std::vector<bool>,每一个bool暗示了Widget是否提供了一个特殊的特性. std::vector<bool> features(const Widget& w); 进一步假设第…
条款3 了解decltype decltype是一个有趣的东西,给它一个变量名或是一个表达式,decltype会告诉你这个变量名或是这个表达式的类型,通常,告诉你的结果和你预测的是一样的,但是偶尔的结果也会让你挠头思考,开始找一些参考资料进行研究,或是在网上寻找答案. 我们从典型的例子开始,因为它的结果都是在我们预料之中的,和模板类型推导与auto类型推导相比(参见条款1和条款2),decltype几乎总是总是返回变量名或是表达式的类型而不会进行任何的修改 ; // decltype(i)是co…
条款2 明白auto类型推导 如果你已经读完了条款1中有关模板类型推导的内容,那么你几乎已经知道了所有关于auto类型推导的事情,因为除了一个古怪的例外,auto的类型推导规则和模板的类型推导规则是一样的,但是为什么会这样呢?模板的类型推导涉及了模板,函数和参数,但是auto的类型推导却没有涉及其中的任何一个. 这确实是对的,但这无关紧要,在auto类型推导和template之间存在一个直接的映射,可以逐字逐句的将一个转化为另外一个. 在条款1中,模板类型推导是以下面的模板形式进行举例讲解的:…
1.第一个CMake例子 在 t1 目录建立 main.c 和 CMakeLists.txt(注意文件名大小写): main.c 文件内容: //main.c #include <stdio.h> int main() { printf(“Hello World from t1 Main!n”); return 0; } CmakeLists.txt 文件内容: PROJECT (HELLO) SET(SRC_LIST main.c) MESSAGE(STATUS "This is…
转自:<你所不知的OSG>第一章:CMake初步(1)http://bbs.osgchina.org/forum.php?mod=viewthread&tid=1189&fromuid=3434 本章的主要目的并非介绍OpenSceneGraph的常用类和功能,而是介绍它的一个重要伙伴,抑或说,是一个被愈来愈多的开源软件所青睐的强劲的辅助开发工具——CMake. CMake的定义是:一个跨平台.开源.可扩展的软件编译生成系统,如果您熟悉与之同类的QMake(开源开发库Qt的自动…
学习cmake http://xwz.me/wiki/doku.php?id=cmake 碰到的一些问题: 1.You have changed variables that require your cache to be deleted死循环 解决方法:CMakeList.txt中include包含的子模板含有环境变量传入的标示且存在ADD_SUBDIRECTORY子目录控制,此时需要将子模板放置在CMakeList.txt的头部中 CMAKE的使用 http://blog.csdn.net…
在Linux下进行C语言编程,必然要采用GNU GCC来编译C源代码生成可执行程序. 一.GCC快速入门 Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件] 其中,目标文件可缺省,Gcc默认生成可执行的文件名为:a.out 然后输入./a.out 便可运行得到结果 二.GCC的命令剖析--四步走 GCC编译C源码有四个步骤: 预处理-----> 编译 ----> 汇编 ----> 链接 1.预处理,生成预编译文件(.i文件): Gcc –E hello.c –…
原文:https://www.zhihu.com/question/27455963 作者:玟清链接:https://www.zhihu.com/question/27455963/answer/36722992来源:知乎著作权归作者所有,转载请联系作者获得授权. 1. make 是用来执行Makefile的2. Makefile是类unix环境下(比如Linux)的类似于批处理的"脚本"文件.其基本语法是: 目标+依赖+命令,只有在目标文件不存在,或目标比依赖的文件更旧,命令才会被执…
学习 Golang,有时需要 Cgo,所以需要学习 C.C++. 语言入门: https://item.jd.com/12580612.html https://item.jd.com/28326539330.html 参见: https://github.com/hunterhug/cmake_example 历史 稍微很长的历史,来源网络,可以先跳过. C语言的发展阶段 C 语言之所以命名为 C,是因为 C 语言源自 Ken Thompson 发明的 B 语言,而 B 语言则源自 BCPL…
<CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX <CMake实践>笔记三:构建静态库与动态库 及 如何使用外部共享库和头文件 前言: 开发了5,6年的时间,如果没有KDE4,也许不会有人或者Linux发行版本重视cmake,因为除了Kitware似乎没有人使用它.通过KDE4的选型和开发,cmake逐渐进入了人们的视线,在实际的使用过程中,cmak…