[英]Is Visual C++ as powerful as gcc?
我對強大的定義是定制的能力。
我熟悉gcc
我想嘗試MSVC。 所以,我在msvc中搜索gcc等效選項。 我找不到他們中的很多人。
控制輸出類型
Stop after the preprocessing stage; do not run the compiler proper.
gcc: -E
msvc: ???
Stop after the stage of compilation proper; do not assemble.
gcc: -S
msvc: ???
Compile or assemble the source files, but do not link.
gcc: -c
msvc:/c
對調試很有用
Print (on standard error output) the commands executed to run the stages of compilation.
gcc: -v
msvc: ???
Store the usual “temporary” intermediate files permanently;
gcc: -save-temps
msvc: ???
MSVC是一個IDE,gcc只是一個編譯器。 CL(MSVC編譯器)可以從gcc的角度執行您描述的大多數步驟。 CL /?
給予幫助。
例如
stdout的預處理:
CL /E
編譯沒有鏈接:
CL /c
生成程序集(與gcc不同,這不會阻止編譯):
CL /Fa
CL
實際上只是一個編譯器,如果你想看看IDE生成什么命令來編譯和鏈接最簡單的事情來查看IDE中項目的屬性頁面的命令行部分。 CL
不會調用單獨的預處理程序或匯編程序,因此沒有單獨的命令可供查看。
對於-save-temps
,IDE執行單獨的編譯和鏈接,因此無論如何都會保留目標文件。 要保留預處理器輸出和匯編器輸出,可以通過IDE啟用/P
和/Fa
。
gcc
和CL
是不同的,但我不會說MSVC缺乏“很多東西”,當然不是你想要的輸出。
對於-E的等價物,cl.exe具有/ P (它不會“在預處理階段后停止”,但它會將預處理器輸出輸出到文件,這在很大程度上是相同的)。
對於-S,它有點模糊,因為“編譯”和“組裝”步驟發生在多個位置,具體取決於您指定的其他選項(例如,如果您打開了整個程序優化,則不會生成機器代碼直到鏈接階段)。
對於-v,Visual C ++與GCC不同。 它直接在cl.exe(和link.exe)中執行編譯的所有階段,因此沒有“命令執行”顯示。 同樣對於-save-temps:因為一切都發生在cl.exe和link.exe中,所以唯一的“臨時”文件是cl.exe生成的.obj文件,無論如何它們總是被保存。
但最終,GCC是一個開源項目。 這意味着任何有癢癢的人都可以添加他們喜歡的命令行選項,但阻力相對較小。 對於商業閉源產品Visual C ++,每個選項都需要有商業案例,設計會議,測試計划等。 每個新功能都以零下100點開頭 。
兩個編譯器都有很多選項可以修改......所有內容。 我懷疑任何一種選項中都沒有的選項是首先不值得做的事情。 大多數“正常”用戶無論如何都找不到大多數這些選項的用途。
如果你純粹關注可用選項的數量作為“權力”或“靈活性”的衡量標准,那么你可能會發現gcc成為贏家,因為gcc處理Windows以外的許多平台並且具有許多特定選項您在MSVC中顯然不會找到的那些平台。 gcc(嗯,gcc工具鏈)也編譯了C和C ++之外的許多語言; 例如,我最近將它用於Objective-C。
編輯:我和Dean一起質疑你問題的有效性。 是的,MSVC(cl)有相當於許多gcc選項的選項,但不是,選項的數量並沒有多大意義。
簡而言之:除非你做一些非常特別的事情,否則你會發現MSVC在Windows平台上很容易“強大”,你可能不會錯過任何gcc選項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.