我做过很多项目,也做过很多不同的构建系统和 CI 工具。最近,我接触到了偶尔具有挑战性的任务,即为合理大小的 C++ 应用程序添加基于自动工具的环境。虽然我喜欢最终用户的易用性,但我不太喜欢处理 m4 和开发人员方面的所有 auto* 工具。
我在业余时间从事一个相当大的副项目,并决定使用 CMake 进行试驾。由于我才刚刚开始,我显然计划通过文档、FAQ、wiki 等进行挖掘,并边做边学。顺便说一句,我会为“Mastering CMake”一书付钱,但我在亚马逊上找到的评论足以让我决定它可能不值得花钱。话虽如此,在任何新事物中,经常会有新手经常会遇到的“陷阱”,而老职业玩家早就学会了避免这些“陷阱”。我想知道这些是基于人们使用 CMake 的经验,我希望通过在这里提问来减少我的学习痛苦。
我应该指出,我计划主要在 Linux 和其他 UN*X 变体上构建。 Windows 并不是我 POV 真正关心的问题。这是一个大型服务器端应用程序,具有用于运算符(operator)的 Web 和 CLI 接口(interface)、用于自动化/与 OSS 工具集成的北向 REST 接口(interface)以及用于 CPE 的 SOAP 南向接口(interface)。我将需要大量第三方库和应用程序才能让这一切正常工作,除非我想在接下来的 10 年内手动构建这一切。 :)
最佳答案
首先,我认为 CMake 是一个出色的构建工具。在我看来,它是迄今为止对多平台构建的最佳支持,并且具有查找 3rd-party 库的强大机制。与 CPack 结合使用,它甚至为打包和安装提供了合理的选择。一些提示和可能的问题:
始终以源代码外构建为目标:一个显而易见的问题:一个专为源代码构建而设计的项目很难在源代码外构建它。所以,如果你能从一开始就设计它,那么就瞄准外源构建。
语法:语法可能很奇怪,有很多奇怪的怪癖,尽管自 2.6 和 2.8 版本以来这种情况变得更好。
缓存变量。 CMake 会跟踪变量和设置的缓存,有时在重建某些内容时可能会出现问题。尝试删除 CMakeCache.txt(或清理您的源外构建目录)并重建。 DarenW也提到了这个。
查找和配置第 3 方库:如果您有一个依赖于多个库(您自己或第 3 方)的大型项目,这可能是最麻烦的。
我强烈建议深入研究 find_package 命令。它非常强大,但完全取决于 FindXXX.cmake 文件的质量。尤其是在多个平台(主要是 Windows 和 Mac)上构建时,这些文件可能需要一些调整,或者您可能需要自己编写。
链接库的问题,如调试“ undefined reference ”或 debug|release 或 static|shared 之间的不匹配可能很难调试。特别是对于 3rd-party 库,这些问题可能是由不正确的 3rd-party FindXXX.cmake 文件引起的......
关于build - CMake 的新手想知道哪些尘土飞扬的角落?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4506193/
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我克隆了一个rails仓库,我现在正尝试捆绑安装背景:OSXElCapitanruby2.2.3p173(2015-08-18修订版51636)[x86_64-darwin15]rails-v在您的Gemfile中列出的或native可用的任何gem源中找不到gem'pg(>=0)ruby'。运行bundleinstall以安装缺少的gem。bundleinstallFetchinggemmetadatafromhttps://rubygems.org/............Fetchingversionmetadatafromhttps://rubygems.org/...Fe
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm
您认为可以作为插件很好地存在于您的Rails应用程序中必须实现的哪些行为?您过去曾搜索过哪些插件功能但找不到?哪些现有的Rails插件可以改进或扩展,如何改进或扩展? 最佳答案 我希望在管理界面中看到一个引擎插件,它提供了应用程序中所有模型的仪表板摘要,以及可配置的事件图表。 关于ruby-on-rails-您希望看到哪些Rails插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio
我正在研究使用EventMachine支持的twitter-streamrubygem来跟踪和捕获推文。我对整个事件编程有点陌生。我如何判断我在事件循环中所做的任何处理是否导致我落后?有没有简单的检查方法? 最佳答案 您可以通过使用周期性计时器并打印出耗时来确定延迟。如果您使用的是1秒的计时器,您应该已经过了大约1秒,如果它更长,您就知道您正在减慢react器的速度。@last=Time.now.to_fEM.add_periodic_timer(1)doputs"LATENCY:#{Time.now.to_f-@last}"@
我真的只是不确定这意味着什么或我应该做什么才能让网页在我的本地主机上运行。现在它只是显示一个错误,上面写着“我们很抱歉,但出了点问题。”当我运行railsserver并在chrome中打开localhost:3000时。这是控制台输出:StartedGET"/users/sign_in"for127.0.0.1at2013-07-0512:07:07-0400ProcessingbyDevise::SessionsController#newasHTMLCompleted500InternalServerErrorin55msNoMethodError(undefinedmethod`
我已经通过提供MagickWand.h的路径尝试了一切,我安装了命令工具。谁能帮帮我?$geminstallrmagick-v2.13.1Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingrmagick:ERROR:Failedtobuildgemnativeextension./Users/ghazanfarali/.rvm/rubies/ruby-1.8.7-p357/bin/rubyextconf.rbcheckingforRubyversion>=1.8.5...yescheckingfor/
我目前有一个reddit克隆类型的网站。我正在尝试根据我的用户之前喜欢的帖子推荐帖子。看起来K最近邻或k均值是执行此操作的最佳方法。我似乎无法理解如何实际实现它。我看过一些数学公式(例如k表示维基百科页面),但它们对我来说并没有真正意义。有人可以推荐一些伪代码,或者可以查看的地方,以便我更好地了解如何执行此操作吗? 最佳答案 K最近邻(又名KNN)是一种分类算法。基本上,您采用包含N个项目的训练组并对它们进行分类。如何对它们进行分类完全取决于您的数据,以及您认为该数据的重要分类特征是什么。在您的示例中,这可能是帖子类别、谁发布了该项