范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

掌握VS项目配置进阶编译器链接器配置

  1. 前言
  在上一篇基础篇中,我们主要探讨了VS的构造系统模型,了解了VS项目最基本的输入输出配置。输入输出是系统对外的功能接口,是系统最基础的部分。
  在本章的进阶篇中,我们要探讨构造系统的内部参数。内部参数用于调整构造系统的行为,这些参数主要来自构造系统中的各个工具。其中,编译器和链接器作为构造系统中最核心的工具,是和我们打交道最多的,也是本文的主要研究对象。 2. 配置选项
  在上一篇《掌握Visual Studio项目配置【基础篇】》中,我们主要讲解了构造系统的基本输入输出配置。基本输入输出配置包含了编译器、链接器的一小部分,剩下的部分主要是编译器链接器的运行参数配置。
  如下图所示, VS编译器参数配置 ,集中在"C/C++"配置页:
  VS编译器参数配置
  VS链接器相关配置 ,集中在"链接器"配置页:
  VS链接器相关配置
  可见VS的项目配置中,包含了大量的编译、链接配置选项。这些选项大多数情况下保持默认值即可,不需要开发者参与。
  但是,某些特殊的应用需求,只有通过配置编译器、链接器选项才能实现。所有在界面上进行的配置操作,最终都会转换为编译器和链接器的运行参数。点击上图中" 命令行 "标签页即可查看这些参数。 3. 官方释义
  下方列出了微软对于以上两个配置节点逐项解释的文档地址: C/C++ 属性页:https://learn.microsoft.com/zh-cn/cpp/build/reference/c-cpp-prop-page?view=msvc-140 "链接器"属性页:https://learn.microsoft.com/zh-cn/cpp/build/reference/linker-property-pages?view=msvc-140
  虽然微软对每一项配置都做了解释,但总体看下来,能够看懂的寥寥无几。
  例如,在 "链接器" 属性页中,对以下配置项
  链接器配置页-配置子项
  官方解释如下:
  链接器配置官方讲解
  不管是配置项本身还是官方释义,都很难看懂。之所以很难看懂,是因为我们对编译器链接器的工作原理和系统底层细节不够了解。所以接下来,我们要研究一下编译器和链接器。 4. 编译器和链接器4.1 基础
  由源码生成可执行程序的过程分为四个阶段:预处理,编译,汇编,链接。
  由源码生成可执行程序的步骤
  其中: 预处理器:用于处理源码中的预处理指令; 编译器:用于将源码转换成汇编代码。VS中的编译器程序为cl.exe; 汇编器:将汇编代码转换为机器码,机器码保存在目标文件中(*.obj),一个源文件(*.cpp)对应生成一个目标文件; 链接器:用于将多个包含机器码的目标文件合成为库(*.dll,*.lib)或可执行程序(*.exe)。VS中的链接器程序为link.exe。
  这些知识十分基础,不作过多描述。 4.2 进阶
  虽然在一般项目中,集成环境已经为我们做了大部分工作,修改编译器、链接器参数的应用场景比较少,但是学习编译器链接器的深入使用,对理解底层系统、拓展技能树、拓宽技术视野、增强技术储备有很大意义。
  编译器、链接器参数较多,且涉及编译原理、操作系统等底层知识,有一定的难度。很多情况下,问题本身并不难,难的是如何掌握问题背后的知识体系。所以我们要做好阅读大量资料的准备。
  微软官方文档中包含了VS编译器和链接器的参考手册: MSVC编译器参考:https://learn.microsoft.com/zh-cn/cpp/build/reference/compiling-a-c-cpp-program?view=msvc-140 MSVC链接器参考:https://learn.microsoft.com/zh-cn/cpp/build/reference/linking?view=msvc-140
  上面两个参考文档,虽然直接作为教程有些牵强,但总体看下来,有以下几点使用价值: 参考手册包括中文及英文原版内容,为一手文档,可以有效防止内容缺漏和误解。做技术要尽量看一手文档; 在项目中遇到看不懂的配置选项时,可以在参考手册中查阅说明; 从参考手册中,可以了解到编译器、链接器参数涉及到哪些对象、知识点,这是深入了解底层知识非常好的着手点。 例如,从编译器的警告级别控制参数: -/w、/W0、/W1、/W2、/W3、/W4、/w1、/w2、/w3、/w4、/Wall、/wd、/we、/wo、/Wv、/WX(警告级别):https://learn.microsoft.com/zh-cn/cpp/build/reference/compiler-option-warning-level?view=msvc-140 章节中可以进一步了解编译器有哪些警告、可以对警告进行哪些配置、#pragma warning指令的用法等等细化知识点。官方文档详尽程度有限,凡是遇到不懂的概念,都可以自行搜索相关资料,进一步了解其细节。
  限于篇幅,这里仅提供了研究思路,具体配置的深入讲解将放在下一篇。 5. 在Qt中配置编译链接参数
  我们知道,Qt可以配置不同的构建套件。在Windows上进行Qt开发时,我们通常选择VS的构建套件,即MSVC套件。VS中编译器链接器的运行参数同样可以在Qt中配置。
  在Qt的.pro文件中,使用以下qmake变量可以向编译器和链接器传递参数(或叫标志flags):
  C编译器: QMAKE_CC :用于指定C编译器名称或路径。 QMAKE_CFLAGS :用于配置编译C源文件时的编译器参数,在所有构建模式下均生效。 QMAKE_CFLAGS_DEBUG :设置编译C++源文件时的编译器参数,仅在Debug构建模式下生效。 QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO :设置编译C++源文件时的编译器参数,仅在Profile构建模式下生效。 QMAKE_CFLAGS_RELEASE :设置编译C++源文件时的编译器参数,仅在Release构建模式下生效。 其他编译器配置相关qmake变量见qmake文档。
  C++编译器: QMAKE_CXX :用于指定C++编译器名称或路径。 QMAKE_CXXFLAGS :用于配置编译C++源文件时的编译器参数,在所有构建模式下均生效。 QMAKE_CXXFLAGS_DEBUG :设置编译C++源文件时的编译器参数,仅在Debug构建模式下生效。 QMAKE_CXXFLAGS_RELEASE :设置编译C++源文件时的编译器参数,仅在Release构建模式下生效。 QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO :设置编译C++源文件时的编译器参数,仅在Profile构建模式下生效。 其他编译器配置相关qmake变量见qmake文档。
  链接器: QMAKE_LFLAGS :用于配置链接器参数。 QMAKE_LFLAGS_DEBUG :用于配置链接器参数,仅在Debug构建模式下生效。 QMAKE_LFLAGS_RELEASE :用于配置链接器参数,仅在Release构建模式下生效。 QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO :用于配置链接器参数,仅在Profile构建模式下生效。 LIBS :用于配置库搜索路径、链接程序库。 其他链接器配置相关qmake变量见qmake文档。
  具体的使用细节,以Qt文档为准,参考 Variables | qmake Manual:https://doc.qt.io/qt-5/qmake-variable-reference.html。
  修改以上变量以后,如何验证修改的编译器链接器参数是否生效呢?在Qt Creator中构建Qt项目时,要注意观察  编译输出窗口 。此窗口中包含构建过程中详细的步骤和参数。如下图所示:
  编译输出
  其中, 以 cl  开头的命令,为编译命令, cl  为编译器,后面的部分为编译器参数;以 link 开头的命令,为链接命令,link 为链接器,后面的部分为链接器参数。
  修改qmake变量后,通过对比编译器链接器参数的变化,即可验证配置的参数是否生效。注意,修改pro文件最好执行一次qmake,以确保修改生效,原理在《掌握Qt构造系统》文章中有对应解释。
  下面举例说明。 5.1 示例1:添加编译参数
  语法参考: 编译器命令行语法:https://learn.microsoft.com/zh-cn/cpp/build/reference/compiler-command-line-syntax?view=msvc-140
  编译器选项参考 : 按类别列出的编译器选项:https://learn.microsoft.com/zh-cn/cpp/build/reference/compiler-options-listed-by-category?view=msvc-140 按字母顺序列出的编译器选项:https://learn.microsoft.com/zh-cn/cpp/build/reference/compiler-options-listed-alphabetically?view=msvc-140
  修改.pro文件:
  禁用编译器优化: QMAKE_CXXFLAGS += -Od
  查看编译输出:
  禁用编译优化-编译输出
  从编译输出可以看出,-Od禁用优化选项成功传递给了编译器,且编译成功。 5.2 示例2:添加链接参数
  语法参考: 链接器命令行语法:https://learn.microsoft.com/zh-cn/cpp/build/reference/linking?view=msvc-140#linker-command-line-syntax
  链接器选项参考 : 链接器选项:https://learn.microsoft.com/zh-cn/cpp/build/reference/linker-options?view=msvc-140
  修改.pro文件:
  打开链接器详细信息输出开关: QMAKE_LFLAGS += /VERBOSE
  查看编译输出:
  启用链接器VERBOSE-编译输出
  从编译输出可以看出,-Od禁用优化 选项成功传递给了链接器,且编译成功,同时打印了大量链接器详细日志,这些日志对于了解链接器工作过程有帮助。
  看懂编译输出是深入Qt开发的必备技能,通过编译输出能够查看到底层构建系统的运行细节,也有助于排查一些难以定位的问题。 6. 结语
  由于编译器链接器内容繁多,限于篇幅,本文只进行了逻辑梳理,很多细节没有涉及。读者可以自行新建项目进行测试,修改配置,对比观察。编程必须要亲自动手实践,只有这样才能避免浮于表面,才能举一反三,完善知识细节。
  关于特定场景下的编译器链接器配置,我们会在后面的文章中细化讲解。
  本文原创发布于 Qt未来工程师。

顺治皇帝只活了24岁,为何却生下14个子女,他是如何办到的?不孝有三,无后为大,这是很多大龄青年经常听到的一句话。对于父母来说,繁衍子嗣是天经地义的事,如果不结婚,不生孩子,简直是大逆不道。这种观念在古代更为强烈。尤其是皇帝,子嗣问题更是关盘点历代后妃系列之与皇帝沾亲带故的后妃们(三)头条创作挑战赛中国古代帝王的后妃出身各有不同,虽然也有一定数量的低阶层出身的女子能够成为后妃,但只在少数。更多的后妃人选主要是由先帝或太后等长辈挑选,这类妃嫔大多出身官宦世家功臣勋历史上唯一一位奴隶皇帝石勒之(二)逐鹿中原攻占洛阳后,义军推翻西晋腐朽统治的目的已经实现,内部在政治上的分野也逐渐明朗化。石勒没有同刘曜王弥在那里争功邀利,却南下许昌,继续扫荡西晋残佘势力。随后攻谷阳,杀冠军将军王兹继破阳梨园弟子台上表演,当朝皇帝亲自指导,如此光辉为何不到百年?阅读此文前,麻烦您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,感谢您的支持。引言梨园,盛行于唐朝时期。梨园是唐朝音乐文化中重要的一部分,也是后代人观摩学习唐朝音乡村日记老庄和他的牛视频加载中大众网海报新闻记者李婷牟怡晓日照报道日照市岚山区黄墩镇的养牛户老庄和他的牛已经相互陪伴了20多年,每年的二月二前后,老庄都会把牛牵出来,套上犁去往离家不远的地里耕一圈。牛上投摩根基金副总经理郭鹏A股市场要更多重视结构性投资机会21世纪经济报道记者朱艺艺上海报道2月19日,由长三角区域合作办公室上海市松江区人民政府复旦大学附属中山医院南方财经全媒体集团指导,中国资本市场50人论坛(K50智库)21世纪经济机遇与挑战并存,中国外贸如何兔破重围?2023年经济开局观察在广州南沙港码头等待海关验放出口的国产汽车。广州海关供图目前微波炉冰箱烤箱洗碗机等家电产业类出口订单排到了今年二季度。格兰仕集团北美区域市场负责人庄瑞玲说,格兰仕更加积极地走出去,CCBEC中国(深圳)跨境电商展将于2月22日开幕2023年2月22至24日跨境电商开年大展CCBEC中国(深圳)跨境电商展览会(春季)将于本月2224日在深圳国际会展中心912号馆举办。本届展会是首届粤港澳服务贸易展览会暨中国(加速度2023丨卫星瞰奋进中国里的忙碌港口巨轮往来桥吊繁忙作业集装箱卡车穿梭不息2023年伊始全国多个港口实现开门红延续了2022年的亮眼成绩上海港完成集装箱吞吐量380。3万标准箱唐山港完成货物吞吐量6220万吨山东港口汽车出海宁德时代牵手福特,中国电池全球化竞争如何破局21世纪经济报道记者左茂轩北京报道美国市场,宁德时代一定要进去。2022年初,宁德时代董事长曾毓群在一场投资人会议上,坚定表达出进军中国电池企业最难进入的市场美国的决心。不过,去年中国船舶集团创新发展模式抢占汽车运输船市场来源经济日报我国首创的7000车位氨燃料动力汽车运输船。(资料图片)今年1月份,中国船舶集团有限公司(以下称中国船舶集团)汽车运输船(PCTC)订单实现增长,在助力我国船舶工业实现
古代起义竟然和天象有关!这你敢信?吉时已到,起事!倘若你穿越到了古代,手握十万大军,兵强马壮。而如今朝廷羸弱,国库空虚,兵马不足,但却掌握大势,那你该怎么办?可能有些读者老爷就会干一些类似大楚兴,陈胜王!的事情了,没有谁的人生是容易的没有谁的人生是容易的。哪怕他学富五车才高八斗,比如李白苏轼。哪怕他天潢贵胄九五之尊,比如扶苏崇祯。或颠沛,或困厄,或身死,或国灭。离合悲欢一样也少不了。本文就来管窥一下汉献帝刘协。89年台湾老妇大陆寻女,亲妹妹40年未见竟下跪我把你女儿弄丢了1989年8月,已经离家40年之久的梁芬玉终于从台北回到了老家。然而让她没有想到的是,自己的亲妹妹在机场见到她的那一瞬间竟然给她跪了下来。梁芬玉吓了一跳,赶紧把妹妹给拉起来。妹妹老聪明的人都是打圆场的高手只要我们身处这个社会,每天都要与人打交道,处理各种各样的事情。这些事情也许与我们自身相关,也许与周围的人有关,若处理不好,就会令自己被动,如果善于与人沟通,很多看似棘手的问题都会在东瀛教父(山口组)田冈一雄(15)地域金交椅替警察维持治安1943年7月13日,田冈一雄刑满释放。田冈一雄又回到了阔别6年的神户。6年,是一段足以改变世界的时光。而此时的山口组,也早已人事皆非。这6年里,山口登玉锦湖南一高校红枫大道赏五彩秋景来源人民网湖南频道逐渐转红的枫叶。杨纪翔摄在艳阳中惬意赏枫的市民。杨纪翔摄校园内的红枫。杨纪翔摄校园内,两排挺立的枫树。杨纪翔摄人民网长沙11月10日电枫叶红,秋意浓。湖南农业大学广东惠州将建巨无霸公园,用地142万平方米,投资2。08亿元公园一般情况下是指政府修建并经营的作为自然观赏区和供公众的休息游玩的公共区域。公园是城市重要的社交场所,是城市的会客厅。目前,我国正在建设世界上最大的国家公园体系,未来推进国家公园手绘百米画卷萌娃眼中的消防是啥样?视频加载中今天(11月9日),是第31个全国消防日。在绵阳市北川羌族自治县,萌娃们插上想象的翅膀,用手中的七彩画笔描绘出对消防的认识和理解,将消防安全的种子扎根心间。在北川县石椅羌NASA罗曼太空望远镜如何探测绚丽的千新星爆炸?如何确定发生在数百万甚至数十亿光年之外的巨大碰撞?首先,通过对大面积的天空进行调查。第二,通过与世界各地的观测站合作。科学家们一直在寻找千新星(Kilonovae),这是宇宙中上演乱世佳人柳如是,相约投西湖,穿着红衣衫慷慨赴国难南明末年,一个出城跪拜降清的秋天,白骨四散,清军战旗猎猎,在刀光剑影中,众降臣们默然依随而行,极似为南明出殡。降臣多会携妻妾随行,唯有柳如是坚决不去。好个柳如是!她不畏惧杀身之祸,清代奇案男子害死好友,假借还魂,巧占一妻一妾,七人因此丧命清代光绪年间,安徽歙县发生了一桩有名的奇案一个贫穷的乡下人,抛弃了妻儿,设下种种毒计,不仅霸占了好朋友的两个妻妾,也让以重商重德闻名天下的歙县商人蒙羞,引起了世人警示。在歙县城外十