<<Modern CMake>> 翻译 1. CMake 介绍】的更多相关文章

<<Modern CMake>> 翻译 1. CMake 介绍 人们喜欢讨厌构建系统. 仅仅观看 CppCon17 上的演讲,就可以看到开发人员因为构建系统而闹笑话的例子. 这让我们思考一个问题:为什么会这样? 构建系统时当然不可能完美无缺. 但我认为,在 2018 年,我们可以很好地解决其中的一些问题. 这就是 CMake.不过 CMake 2.8 可能不行; 它在 C++11 发布之前就 release 了! 对于 CMake 来说也没有可怕的例子(甚至那些发布在 KitWar…
<<Modern CMake>> 翻译 2. CMake 基础 最低版本 这是每个 CMakeLists.txt 文件的第一行.CMakeLists.txt 是 CMake 所需的配置文件名称: cmake_minimum_required(VERSION 3.1) 我们来了解一点 CMake 语法. 命令名称 cmake_minimum_required 不区分大小写,因此通常的做法是使用小写.1 这里 VERSION 是该命令所需的特殊关键字. 版本号紧跟在 VERSION 关…
<<Modern CMake>> 翻译 2.4 项目目录结构 本节内容有点跑题.但我认为这是一个很好的方法. 我将告诉你如何规划项目的目录. 这是基于惯例,但将帮助您: 轻松阅读其他按照相同模式的项目, 避免导致冲突的模式, 避免混淆和使构建变得复杂. 首先,如果您的项目被叫做 project,包含一个链接库叫做 lib,一个可执行文件叫做 app, 那么您的文件目录应该类似以下结构: - project - .gitignore - README.md - LICENCE.md…
<<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.3 与代码通信 配置文件 CMake 允许您使用代码通过 configure_file 存取 CMake 变量. 此命令复制一个文件,通常是把 .in后缀文件从一个地方拷贝到另一个地方,替换其中的所有 CMake 变量. 如果你想避免将你的输入文件中现有的 ${} 进行替换,可以使用 @ONLY 关键字. 也有一个 COPY_ONLY 关键字,可以在你只是替代 file(COPY 时使用. 此功能使用非常频繁; 例如,在 Version.…
转载自我的博客: CMake 简介和 CMake 模板 . 如果你用 Linux 操作系统,使用 cmake 会简单很多,可以参考一个很好的教程: CMake 入门实战 | HaHack .如果你用 Linux 操作系统,而且只是运行一些小程序,可以看看我的另一篇博客: 你就编译一个 cpp,用 CMake 还不如用 pkg-config 呢 . 但如果你用 Windows,很大的可能你会使用图形界面的 CMake(cmake-gui.exe)和 Visual Studio.本文先简单介绍使用…
/*********************************************************** 关于书: 书是我从网上找到的effective Modern C++的样章,内容只到条款4就没有了, 所以现阶段我只能翻译到条款4,不过以后有机会我会继续翻译的. 如果读者找到了完整的版本,欢迎大家发给我.1021842556@qq.com effective Modern C++的样章的下载地址http://pan.baidu.com/s/1ntKBlpf 提取密码是upk…
CMake安装或CMake Error at CMakeLists 发生情景: 使用cmake命令安装软件时,报如下错误: CMake Error at CMakeLists.txt:4 (CMAKE_MINIMUM_REQUIRED): CMake 3.0.2 or higher is required. You are running version 2.8.12.2-- Configuring incomplete, errors occurred! 提示CMake版本低,需要更高版本.…
CMake Error at cmake/boost.cmake:81 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST= This CMake script will look for boost in . If it is not there, it will download and unpack it (in that directory) for you. If you are inside a fi…
参考资料地址:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf 一.初识cmake 1. Cmake特点 开放源代码 跨平台 能够管理大型项目 简化编译构建和编译过程(常用流程:cmake + make) 高效率 可扩展 每个目录编写一份CMakeLists.txt 二.初试cmake -- helloworld 1. 准备工作 mkdir -p /backup/cmake cd /bac…
CMake Error at cmake/OpenCVUtils.cmake:1047 (message): Failed to download . Status= Call Stack (most recent call first): ../opencv_contrib/modules/dnn/cmake/OpenCVFindLibProtobuf.cmake:32 (ocv_download) ../opencv_contrib/modules/dnn/CMakeLists.txt:5…
编译mysql5.7.9的时候报错 CMake Error at cmake/boost.cmake:76 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory> This CMake script will look for boost in <directory>. If it is not there, it will download and unpack it (in…
问题描述 利用toolchian.cmake设置好编译器后,利用make指令生成静态库,出现以下问题 Error running link command: No such file or directory 出错原因,toolchain.cmake文件内没有声明静态库生成器AR:解决方式,在toolchian.cmake文件内添加下面的声明 SET(CMAKE_AR $(TOOLCHAIN_DIR)/bin/arm-linux-gnueabihf-ar CACHE FILEPATH "Arch…
本文首发于个人博客https://kezunlin.me/post/977f5125/,欢迎阅读! compile glog and glags on ubuntu 16.04 Series compile glog and glags on windows compile glog and glags on ubuntu 16.04 Guide version wget https://github.com/schuhschuh/gflags/archive/v2.2.1.tar.gz wge…
本文首发于个人博客https://kezunlin.me/post/bb64e398/,欢迎阅读! compile glog v0.3.5 and glags on windows from source. Series compile glog and glags on windows compile glog and glags on ubuntu 16.04 Guide version glog: v0.3.5 https://github.com/google/glog/archive/…
本文首发于个人博客https://kezunlin.me/post/12ab5707/,欢迎阅读! cmake with user defined entry Guide FindXXX.cmake in CMAKE_MODULE_PATH xxx-config.cmake in CMAKE_PREFIX_PATH cmake default package FindXXX.cmake use find_package to find default package with name XXX…
CMake Error at cmake/readline.cmake:85 (MESSAGE):  Curses library not found.  Please install appropriate package, remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel. Ca…
1.看当前cmake版本 cmake --version 2.卸载旧版本下的cmake apt-get autoremove cmake 3.安装新版面cmake http://www.cnblogs.com/weiqinglan/p/5681539.html http://www.cnblogs.com/weiqinglan/p/6004447.html 4.看当前cmake版本 cmake --version…
文章翻译自 http://social.technet.microsoft.com/wiki/contents/articles/910.windows-7-enabling-telnet-client.aspx 1. 介绍 Telnet客户端,通过Telnet协议用来连接远程计算机.举个例子,像我这样的IT老兵,还是喜欢用Telnet来配置cisco交换机/路由器.如果你刚刚开始使用windows7,你会发现Telnet服务是默认不开启的!!不要慌,开启这个服务也就是点几下鼠标的事情. Tel…
Could not find a package configuration file provided by "pcl" (requested  version 1.8) with any of the following names: pclConfig.cmake    pcl-config.cmake 在 find_package(PCL 1.8 REQUIRED )之前添加set(PCL_DIR /usr/share/pcl-1.8/PCLConfig.cmake),需要注意…
MySQL在5.7版本及以后,都需要boots 库,所以需要先安装boots 步骤: 1.在/usr/local下创建 名为boots的目录 mkdir -p /usr/local/boots 2.进入该目录,然后下载boots wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz 3.解压 tar xf boost_1_59_0.tar.gz 4.继续cmake,但在cmake…
翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2.0 .在线浏览地址:http://gradledoc.qiniudn.com/2.0/userguide/userguide.html .另外,Android 手机用户可通过我写的一个程序浏览文档,带缓存功能的,目前0.6开发中版本兼容 Android 2.3以上系统,项目地址如下:https:/…
Distinctive Image Features from Scale-Invariant Keypoints,这篇论文是图像识别领域SIFT算法最为经典的一篇论文,导师给布置的第一篇任务就是它.网上找了好多找不到中译本,那就自己动手丰衣足食吧,顺便造福后人,花时间翻译啃下来并做一个笔记在这吧. ---------------------------------------------------------------------------------------------------…
与CMake相遇 做C/C++的人都应该经历过,以往拿到一个开源代码,想自己编译出来,总会因为VS的版本不同而出现各种各样的问题,使编译过程困难重重,更多时候就会放弃使用它了.而这个过程反过来,也会使用一些开源项目难于推广. 另外,基于我的跨平台开发经历,更是一个灾难.刚毕业那会,我有一个项目是Windows下开发,但服务器是Ubuntu的,当初我是在windows下的VS2015开发,调试得没问题了,还要上传到服务器,再根据其环境写各种makefile 两年前吧,接触到OpenCV,看到里面竟…
第一章 类型推导 C++98有一套单一的类型推导的规则:用来推导函数模板,C++11轻微的修改了这些规则并且增加了两个,一个用于auto,一个用于decltype,接着C++14扩展了auto和decltype可以使用的语境,类型推导的普遍应用将程序员从必须拼写那些显然的,多余的类型的暴政中解放了出来,它使得C++开发的软件更有弹性,因为在某处改变一个类型会自动的通过类型推导传播到其他的地方. 然而,它可能使产生的代码更难观察,因为编译器推导出的类型可能不像我们想的那样显而易见. 想要在现代C+…
条款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中,模板类型推导是以下面的模板形式进行举例讲解的:…
其实,我们使用的opencv中要用的contrib/modules   是需要额外下载并在cmakelists.txt中指定的 git clone https://github.com/opencv/opencv_contrib.git  然后,就有opencv_contrib  的path啦 cd opencv_contrib git checkout 3.1.0   别忘了check你的版本…
条款4:了解如何观察推导出的类型 那些想要知道编译器推导出的类型的人通常分为两种,第一种是实用主义者,他们的动力通常来自于软件产生的问题(例如他们还在调试解决中),他们利用编译器进行寻找,并相信这个能帮他们找到问题的源头(they’re looking for insights into compilation that can help them identify the source of the problem.).另一种是经验主义者,他们探索条款1-3所描述的推导规则,并且从大量的推导情…