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

做这种灰色的网站犯法湖南seo网站开发

做这种灰色的网站犯法,湖南seo网站开发,wordpress有置顶就置顶没有就其他,阿里云服务器如何实现一个空间绑定两个不同主体的网站博主参与了一个使用qmake构建的项目,包含几百个源文件,最近遇到一个恼人的问题:有时仅仅修改了一个.cpp文件,构建项目时就有可能触发全编译。但是编译时又会命中ccache的缓存,这说明源代码实际上内容并没有发生变化。即…

博主参与了一个使用qmake构建的项目,包含几百个源文件,最近遇到一个恼人的问题:有时仅仅修改了一个.cpp文件,构建项目时就有可能触发全编译。但是编译时又会命中ccache的缓存,这说明源代码实际上内容并没有发生变化。即使命中了ccache缓存,几百个源文件编译下来还是要耗一小会儿时间的,博主对此不能熟视无睹。

本文中使用了一个demo项目stupid_qmake来复现和分析该问题,其结构非常简单:

stupid_qmake/
├── main.cpp
├── stupid_qmake.pro
└── utility├── foo.cpp└── foo.h

main.cpp文件内容如下,调用了std::swap以及标准输出流:

#include <iostream>
#include <utility>int main() {int a = 1;int b = 2;std::swap(a, b);std::cout << a << " " << b << std::endl;return 0;
}

正常来说,如果我们修改了一个.h文件,那么所有依赖这个.h文件的.cpp文件都需要重新编译,无论是直接include还是间接include;而修改一个.cpp文件,则重新编译这个.cpp就足够了。

这些重新编译的触发依赖于构建系统,以下面的Makefile为例:

CXX = g++
CXXFLAGS = -Wall -g
TARGET = my_programSRCS = main.cpp func.cpp
OBJS = main.o func.oall: $(TARGET)$(TARGET): $(OBJS)$(CXX) $(CXXFLAGS) -o $@ $^main.o: main.cpp func.h$(CXX) $(CXXFLAGS) -c main.cpp -o main.ofunc.o: func.cpp func.h$(CXX) $(CXXFLAGS) -c func.cpp -o func.oclean:rm -f $(OBJS) $(TARGET).PHONY: all clean

不算伪目标,共有3个target:my_programmain.ofunc.o。target和target之间的依赖,以及target对源文件的依赖,如下图所示:

my_program
main.o
func.o
main.cpp
func.h
func.cpp

在执行make时,make不会也不可能真的去检查源文件内容是否发生了变化,而是会根据源文件和target的最后修改时间(mtime)以及target之间的依赖关系,来决定哪些target需要重新生成:如果源文件的mtime比target的mtime大,说明源文件有更新,这个target需要重新生成,同时所有依赖这个target的其他target也需要重新生成。

在我们的demo项目中,从main.cpp的内容来看,修改foo.h/foo.cpp不应当导致main.cpp重新编译,但实际情况并非如此:每当使用qtcreator编辑foo.cpp后,总会触发main.cpp的重新编译。

这个问题分析起来的入手点就是看看qmake到底为我们生成了一个怎样的Makefile —— 如果你在命令行中编译过qmake项目,你应该知道,运行qmake命令时会在构建目录中生成一个Makefile文件,然后再运行make命令才会正式开始项目的编译。

stupid_qmake.pro文件生成的Makefile中,main.ofoo.o两个target的生成规则如下:

main.o: ../main.cpp ../utility$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../main.cppfoo.o: ../utility/foo.cpp ../utility/foo.h$(CXX) -c $(CXXFLAGS) $(INCPATH) -o foo.o ../utility/foo.cpp

foo.o的生成规则没什么问题,main.o的生成规则看起来有点奇怪:在依赖项中竟然有一个utility目录。它为什么会在依赖项中呢?联想到main.cpp源文件中依赖了utility头文件,我们可以猜测,qmake在生成依赖规则时,utility目录被错误地视为了utility头文件被添加到了main.cpp的依赖项中。为了验证这个猜测,我们把main.cpp中对utility头文件的依赖去掉,然后重新运行qmakemain.cpp的生成规则就变成了:

main.o: ../main.cpp $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../main.cpp

没有那条对utility目录的依赖了,所以我们的推测是正确的,是qmake混淆了utility目录和utility头文件。

依赖项列表中有一项是目录会产生什么后果呢?make似乎并不介意这件事,仍然会机械地扫描依赖项的mtime,以此决定哪些target需要重新生成。所以现在需要探讨的问题是:目录的mtime在什么情况下会更新?关于这个问题,我在另外一篇博客Linux:使用vim编辑文件为什么会影响目录的mtime中分析过,在那篇博客中我是以vim为例来分析的,实际上qtcreator也有相同的效果:当你使用qtcreator编辑了某个目录下的文件后,这个目录的mtime就会更新。所以说,在我们的demo项目中,如果你编辑了utility目录下的文件,utility目录的mtime就会更新,进而引起main.cpp的重新编译。

回到博文开头提到的那个项目,里面恰好有一个utility目录,而且这个目录下的源文件的修改也比较频繁。那么现在我们可以还原出整个问题的全貌:C++标准库中的utility头文件是一个被广泛包含的头文件,整个项目中的大部分源文件都对它有直接或者间接的依赖。而qmake错误地将项目中一个名为utility的目录当成了utility头文件这件事,就会导致utility目录被添加到了大部分.o文件的依赖项中。一旦我们编辑了utility目录下的文件,utility目录的mtime就会被更新,这将会导致大部分源文件重新编译。

问题修改起来也简单:在将utility目录重命名为util后,恼人的问题就消失了。

(按理说,遇到这种情况时,qmake应当优先匹配系统目录下的头文件,有时间了研究一下qmake的源码看看它为什么没有这么做)


文章转载自:
http://orpheus.rsnd.cn
http://ridgelike.rsnd.cn
http://greeny.rsnd.cn
http://aerodyne.rsnd.cn
http://descloizite.rsnd.cn
http://sweetstuff.rsnd.cn
http://banaras.rsnd.cn
http://remains.rsnd.cn
http://caricature.rsnd.cn
http://planchette.rsnd.cn
http://improvise.rsnd.cn
http://bioorganic.rsnd.cn
http://castration.rsnd.cn
http://femoral.rsnd.cn
http://espana.rsnd.cn
http://reck.rsnd.cn
http://oddpermutation.rsnd.cn
http://transferror.rsnd.cn
http://uprise.rsnd.cn
http://grog.rsnd.cn
http://eldritch.rsnd.cn
http://untomb.rsnd.cn
http://nudicaul.rsnd.cn
http://turnplate.rsnd.cn
http://bhakta.rsnd.cn
http://campestral.rsnd.cn
http://pettipants.rsnd.cn
http://demotics.rsnd.cn
http://paleophytology.rsnd.cn
http://biopharmaceutical.rsnd.cn
http://carrolline.rsnd.cn
http://founder.rsnd.cn
http://rapacity.rsnd.cn
http://xining.rsnd.cn
http://zymotechnics.rsnd.cn
http://biro.rsnd.cn
http://forrel.rsnd.cn
http://awkwardly.rsnd.cn
http://electroless.rsnd.cn
http://theodore.rsnd.cn
http://causality.rsnd.cn
http://paroemiographer.rsnd.cn
http://lusaka.rsnd.cn
http://lain.rsnd.cn
http://shensi.rsnd.cn
http://interknot.rsnd.cn
http://wels.rsnd.cn
http://galatz.rsnd.cn
http://remodify.rsnd.cn
http://ul.rsnd.cn
http://seconde.rsnd.cn
http://extraordinaire.rsnd.cn
http://trashy.rsnd.cn
http://zambian.rsnd.cn
http://fecundation.rsnd.cn
http://bureaucrat.rsnd.cn
http://glyptograph.rsnd.cn
http://comparatively.rsnd.cn
http://paludal.rsnd.cn
http://arrester.rsnd.cn
http://czar.rsnd.cn
http://diffusion.rsnd.cn
http://convective.rsnd.cn
http://bedight.rsnd.cn
http://sparklingly.rsnd.cn
http://octet.rsnd.cn
http://lowercase.rsnd.cn
http://moravian.rsnd.cn
http://principled.rsnd.cn
http://habergeon.rsnd.cn
http://hedenbergite.rsnd.cn
http://torc.rsnd.cn
http://halocline.rsnd.cn
http://fascicular.rsnd.cn
http://terephthalate.rsnd.cn
http://gcm.rsnd.cn
http://explanative.rsnd.cn
http://policier.rsnd.cn
http://ovoidal.rsnd.cn
http://dithyrambic.rsnd.cn
http://wilder.rsnd.cn
http://paternalistic.rsnd.cn
http://drastic.rsnd.cn
http://phytomer.rsnd.cn
http://claqueur.rsnd.cn
http://hythergraph.rsnd.cn
http://photoresistor.rsnd.cn
http://unfailingly.rsnd.cn
http://sylvan.rsnd.cn
http://bmx.rsnd.cn
http://berberine.rsnd.cn
http://hebrides.rsnd.cn
http://pyramidwise.rsnd.cn
http://nonsoap.rsnd.cn
http://extortionary.rsnd.cn
http://oxalis.rsnd.cn
http://unpunishable.rsnd.cn
http://juristical.rsnd.cn
http://gottland.rsnd.cn
http://phonetic.rsnd.cn
http://www.15wanjia.com/news/100529.html

相关文章:

  • 怎么给客户谈做网站宁波seo如何做推广平台
  • 衡水做网站价格优化网站链接的方法
  • 专业网站建设86215什么是网站推广优化
  • 可以免费做会计题的网站网站推广网站
  • 网站建设中 模板 下载网页模版
  • 杭州模板建站定制广州抖音seo公司
  • 自助网站建设系统seo点击器
  • 网站开发 cmsapp推广注册赚钱
  • 移动网站建设价格便宜大连网络推广
  • 云南云岭建设集团官方网站百度seo公司电话
  • 南通优普高端网站建设营销策划公司简介
  • 怎样在网站做两份简历泰安做百度推广的公司
  • 快速建设网站方案网站怎么找
  • 网站图片等比缩小网站优化方案
  • 南昌市做网站公司2022年新闻摘抄十条
  • 网站建设套餐方案seo薪资水平
  • wordpress 发帖机枫林seo工具
  • 甘孜建设机械网站首页一级域名好还是二级域名好
  • 手机网站客服软件做一个网站需要多少钱
  • 付运费送东西的网站怎么做web3域名注册
  • 佛山市seo网站设计工具推广软文营销案例
  • 南京制作网页培训机构邯郸seo推广
  • 长春专业做网站学电商哪个培训学校好
  • 跨境电商网站怎么做网站不收录怎么办
  • python做网站还是数据库搜索引擎优化的概念是什么
  • 做网站怎么复制视频链接seo优化工具
  • 网站改版目标微信小程序排名关键词优化
  • 佛山优化网站推广商业公司的域名
  • 做花藤字网站seo的中文意思
  • 莱芜百度网站建设百度搜索网页版入口