我正在使用 Qt 开发一个项目,该项目使用了许多外部库,我想知道是否有一种通用方法可以使源代码在不同机器之间具有一定的可移植性。
目前,我通过 Qt Creator(添加库...)将各种库添加到项目中,它使用 .pro 文件中的相对路径。这显然不仅在我移动项目后立即停止工作,而且如果任何库路径发生变化,也不会在其他机器上工作。使用绝对路径只能解决部分问题,因为我仍然需要确保每台机器上的每个库都在同一路径下。
举个例子,这是我的 .pro 文件目前的一部分:
LIBS += -L"c:/Program Files/Microsoft SDKs/Kinect/v1.7/lib/x86/" -lKinect10
win32 {
INCLUDEPATH += "c:/Program Files/Microsoft SDKs/Kinect/v1.7/inc"
DEPENDPATH += "c:/Program Files/Microsoft SDKs/Kinect/v1.7/inc"
}
LIBS += -ladvapi32 \
-lgdi32
INCLUDEPATH += "$$PWD/../../../../../Libraries/PCL 1.6.0/include/pcl-1.6"
DEPENDPATH += "$$PWD/../../../../../Libraries/PCL 1.6.0/include/pcl-1.6"
INCLUDEPATH += "C:/Libraries/PCL 1.6.0/3rdParty/Boost/include"
DEPENDPATH += "C:/Libraries/PCL 1.6.0/3rdParty/Boost/include"
LIBS += -L"$$PWD/../../../../../Libraries/PCL 1.6.0/3rdParty/Boost/lib/" -llibboost_date_time-vc100-mt-gd-1_49
LIBS += -L"$$PWD/../../../../../Libraries/PCL 1.6.0/lib/" -lpcl_visualization_debug
LIBS += -L"$$PWD/../../../../../Libraries/opencv/build/x86/vc10/lib/" -lopencv_core245
INCLUDEPATH += "$$PWD/../../../../../Libraries/opencv/include"
DEPENDPATH += "$$PWD/../../../../../Libraries/opencv/include"
什么是最好的组织方式?
最佳答案
我建议在您的项目中有一个“3rdparty”文件夹,就像 Qt does that internal in its repository .这样,您就可以正确设置在每台机器上都相同的路径。
如果有必要为不同的体系结构等提供二进制文件,那么我建议甚至导入代码。然后,您可以为目标系统即时构建它们。与使用预建库相比,这会花费更多时间,但这是灵活的代价。
如果您需要让公共(public)库跨多个项目工作,您始终可以为此使用专用存储库,并制定必须 check out 的策略。
您可能正在寻找的一个“术语”是存在于 svn 世界中的“外部”,但您也可以将其视为另一个 git 存储库中的 git 存储库。关键是,您插入公共(public)“存储库”以在依赖它的项目之间共享。
您总是可以有一个设置脚本,它只是为人们正确设置路径而没有太大的灵 active 。我在具有企业环境的大公司中经常看到这种情况,在这些公司中,他们试图以降低灵 active 为代价来实现一致性。
根据我在开源世界和专有领域的经验,这些事情相当普遍。
关于c++ - 在 Windows Qt Project 上存储外部库的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20925067/
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:
我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion