首页 > 其他分享 >为什么设置MSVC cl.exe到PATH路径,依然无法正常编译?为什么MSVC toolchain有多个cl.exe?Clang也兼容MSVC?Clang/GCC/MSVC编译器对比

为什么设置MSVC cl.exe到PATH路径,依然无法正常编译?为什么MSVC toolchain有多个cl.exe?Clang也兼容MSVC?Clang/GCC/MSVC编译器对比

时间:2025-01-12 11:59:42浏览次数:3  
标签:GCC exe cl C++ Clang MSVC

为什么设置MSVC cl.exe到PATH路径,依然无法正常编译?

MSVC可以正常编译C/C++代码的前提,还包括INCLUDE/LIB路径等都正确配置,而这无法仅仅通过MSVC cl.exe的PATH路径来完成。VS提供了一个官方的配置MSVC环境的方式,可以通过开始菜单的"Developer Command Prompt for VS 2019"进入MSVC环境,这里的cl.exe才能正常编译。

为什么MSVC toolchain有多个cl.exe?

MSVC提供的不仅仅一个host + target的toolchain,根据host架构x86和x64共2种,target架构有x86、x64、arm或arm64四种,总共有8个cl.exe. 例如:

  • D:\ProgramFiles\MicrosoftVisualStudio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx86\arm64\cl.exe 32bit x86架构host,编译成arm64架构可执行文件
  • D:\ProgramFiles\MicrosoftVisualStudio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\cl.exe 64bit x64架构host,编译成x64架构可执行文件

Clang也兼容MSVC?

没错,Clang设计目标是GCC & MSVC compatibility,Windows版本的Clang编译器,默认clang.exe是兼容GCC选项,clang-cl.exe是兼容MSVC编译选项。

Clang/GCC/MSVC编译器对比

  • 编译选项:Clang 和 GCC在很多编译选项上是相似的,因为 Clang 旨在与 GCC 兼容。MSVC的选项一般以/开头 ,和普通DOS命令选项类似,clang和gcc按照Unix命令选项-或者--开头。
  • 跨平台:Clang和GCC是跨平台的,可以在多种操作系统上使用,包括Linux、macOS和Windows等。MSVC只用于Windows平台。Clang和GCC兼容性很好,Makefile移植心智负担小,到Windows平台就需要注意选项差异。
  • 语言标准支持:MSVC较新版本才对C99有较完整支持,对C11/C17支持不是很好,VS2022默认依然主要是C90(额外附带一些C99 feature和MSVC特性). Clang和GCC支持就更好一些,最新版本支持更新的C标准。MSVC对C++标准支持比Clang和GCC都快,对C++20支持更好。
  • 错误提示:Clang在错误信息和警告方面做得很好,能够提供更清晰、更精确的错误提示。
  • 支持语言:GCC支持的语言最多,因为它已经变成前端了,除了C/C++/Obj C/C++语言,Fortran、Ada等都在支持之列,早期也支持Java,后来逐渐Phase out.


若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

标签:GCC,exe,cl,C++,Clang,MSVC
From: https://blog.csdn.net/cxsjabcabc/article/details/145091105

相关文章

  • zenoh client 以及peer 对于存储插件的支持配置说明
    以前说过从1.0.0开始zenoh支持对于存储插件的配置,但是会有一些要求,就是timestamping必须开启client以及peer支持存储插件配置参考配置"mode":"client"|"peer","timestamping":{"enabled":{"router":true,"peer":......
  • docker安装eclipse-mosquito测试mqtt
    拉取镜像dockerpulleclipse-mosquitto创建目录mkdirmqttcdmqttmkdirconfigmkdirdatamkdirlog创建配置文件cdmqtt/configtouchmosquitto.conftouchpasswdvimmosquitto.conf点击查看代码listener1883persistencetruepersistence_location/mo......
  • Oracle 学习全攻略
    Oracle学习资料Oracle学习资料Oracle学习资料在当今信息技术蓬勃发展的时代,数据库管理系统起着举足轻重的作用,而Oracle作为行业内的领军者,以其强大、稳定、高效的特性,广泛应用于金融、电信、政府等诸多关键领域。若你渴望踏入数据库领域的高阶殿堂,开启Oracle的......
  • Oracle 学习全攻略
    Oracle学习资料https://pan.quark.cn/s/c4bedbcbdd63Oracle学习资料https://pan.quark.cn/s/c4bedbcbdd63Oracle学习资料https://pan.quark.cn/s/c4bedbcbdd63在当今信息技术蓬勃发展的时代,数据库管理系统起着举足轻重的作用,而Oracle作为行业内的领军者,以其强大、稳......
  • C# .NetCore HttpClient 标题名称 Content-Type、content-md5、Accept误用 确保请求头
    异常消息:        异常1、Misusedheadername,'Content-Type'.MakesurerequestheadersareusedwithHttpRequestMessage,responseheaderswithHttpResponseMessage,andcontentheaderswithHttpContentobjects        大概意思:标题名称“Cont......
  • 新模型设计:Hybrid Quantum-Classical Neural Network (HQCNN) for Image Classificati
    新模型设计:HybridQuantum-ClassicalNeuralNetwork(HQCNN)forImageClassification目录新模型设计:HybridQuantum-ClassicalNeuralNetwork(HQCNN)forImageClassification引言1.HybridQuantum-ClassicalNeuralNetwork简介2.HybridQuantum-Classi......
  • 【论文阅读】Integrating single-cell multi-omics data through self-supervised clu
    论文地址:Integratingsingle-cellmulti-omicsdatathroughself-supervisedclustering-ScienceDirect代码地址:https://github.com/biomed-AI/scFPN摘要单细胞测序技术的进步使得个体细胞能够同时在多种组学层面进行测序,例如转录组学、表观基因组学和蛋白质组学。整合......
  • bp靶场---SQL注入第六关(oracle)
    Lab:SQLinjectionattack,listingthedatabasecontentsonOracle传送门:https://portswigger.net/web-security/sql-injection/examining-the-database/lab-listing-database-contents-oracle看一下描述拿到adminstrator的账号密码进行登录,已知该数据库为oracle第一......
  • mysql,PostgreSQL,Oracle数据库sql的细微差异(2) [whith as; group by; 日期引用]
    sql示例(MySQL)WITH  temp1AS(    SELECTnameASresults    FROMUsersu    JOINMovieRatingmONu.user_id=m.user_id    GROUPBYm.user_id    ORDERBYCOUNT(*)DESC,left(name,1)    LIMIT......
  • OpenCL入门笔记
    1、概述1.1、OpenCL标准OpenCL(OpenComputingLanguage)是一个开放标准的并行编程框架,它允许开发者在异构系统上利用各种计算设备(例如CPU、GPU、FPGA等)来加速任务,目前已被广泛应用于视频处理、医学成像、机器学习等领域。OpenCL最初由苹果公司提出,并在与AMD、IBM、Intel、NVID......