如何在 Visual Studio 上用 C/C++ 寫 Linux 程序?

能在vs上使用linux c/c++ headers並可以使用智能提示,且可以編譯通過,可以有鏈接錯誤。

一直在vs上寫程序習慣了。


不需要插件了

Visual Studio 2017 Linux development with C++

安裝 Visual Studio 2017, 在 installer 里拉到最底下,勾上 Linux

建立一個 Linux Project,寫代碼,點調試。

彈出窗口讓你連接(Password/Key)到 Linux 伺服器 / Windows Subsystem for Linux (或者叫 Ubuntu On Bash On Windows? 我真的不知道微軟改成啥名了)

完。

另外還可以直接 Attach 到正在運行的程序。

更多設置可以到 Project Properties 里折騰。


是個 Gif,點開來看。

取自微軟網站。


轉一份翻譯。

Linux 工程師新法寶

2016年10月13日更新

///////////////////////////////////////////////////////////

升級了主機。終於有機會用到這個玩意了。

真的很好用。

配置照著教程一次過。

有交互窗口。可以debug。可以換clang編譯。

我一般就是開著vm虛擬機然後在vs上寫代碼。

提一點 vmware那裡最好加一個網卡,然後設為靜態IP。這樣就不用被動態IP影響了(主要是多個虛擬機的時候……)

唯一的缺點大概是……自動補全啥的支持不太好……VS裡面就是一片紅……看著很不爽……

原答案:

///////////////////////////////////////////////////////////

感覺這個已經是比較方便的了。免費。不過是需要一個Linux的主機(或者虛擬機?)

Visual C++ for Linux Development


visual studio2017rc大法好

自帶Linux交叉編譯


早年有個扯淡玩意兒叫 Magic C++ 來著……


VisualGDB


如果你不是為了用什麼只有linux才有的東西(譬如說裸用epoll)的話,其實你完全可以寫的時候小心點,在Windows上跑過了,然後寫個makefile在linux下再編譯一次跑你的test case。我寫跨平台的東西都是這麼做的,linux調試這些邏輯超複雜的C++程序哪有visual studio方便。

如果你只是覺得gcc的輸出太難看的話,你就換clang吧,順便在vim下面整個ycm,就有智能提示了(雖然跟visual studio還是無法相比)。


自問自答一記。

找到一個神器,VisualGDB - Integrate GCC and GDB in Visual Studio

完全滿足這個問題的要求,並且還能編譯、運行、debug、部署。是收費的,不知道有沒有同類的開源實現?


神器:WinGDB

WinGDB - Debugging with GDB under Visual Studio

只是需要購買,但個人覺得還是值得的


之前也有找過,網上看到的一個,目測估計可以行得通。聊一下我在LINUX環境下用過的C/C++編輯器(或IDE)-CSDN論壇-CSDN.NET-中國最大的IT技術社區

7:Visual Studio + Visual Assist + VMWare + 共享文件夾

(在虛擬機中安裝LINUX,把LINUX的系統的頭文件拷出來,加入VA的包含路徑,然後用VS在共享文件夾中創建項目,並在VS中編寫代碼,最後在LINUX中運行makefile)

這種方法是我目前所使用的開發方式,雖然看起來有點怪異,但編寫代碼的效率還真不低,也是我最喜歡的開發方式(沒有之一)


近一個月來都是在vs上寫Linux的代碼,也算是「從入門到精通」吧。由於是寫計算機網路相關的東西,所以許多頭文件函數調用什麼都跟windows上的不一樣。

從vs2015開始便有了Linux平台開發的支持,看之前的答案介紹了vs Linux的入門方法,但實際應用中,vs的Linux跨平台並不是很完美,遇到了以下幾個問題。

  1. Linux機的GCC版本過低

可以看到,在最終生成可執行程序的過程中,vs是默認執行了許多命令參數的,而對於舊版的GCC,這裡許多命令是不支持的(比如GCC4.7之前的版本是不支持C++11的)。

解決辦法就是在項目屬性中將不支持的命令去掉。這樣就可以跨平台編譯成功一些簡單的程序。但是對於一些複雜的項目(比如鏈接許多第三方庫),就會遇到一些莫名奇妙的錯誤。對於這種情況,就需要自己編寫makefile,然後在Linux上進行編譯了。

2.語法高亮,代碼補全

vs自身只帶了少部分的Linux頭文件,如果要用到其他頭文件或者第三方庫,可以將頭文件拷貝到本地目錄,然後將目錄添加到項目的include目錄中。

3.測試

筆者單元測試用的Google Test,在vs中編寫Linux平台 Google Test的相關測試其實也就相當於新建了一個項目。

如圖,在同一個解決方案中,第一個項目為目標項目,第二個項目為Google test項目,而第三個項目,是用來測試能在windows平台上運行的部分模塊的性能。

關於性能測試,雖然Linux的GPROF和valgrind也算是不錯,但是vs的性能分析可視化做的更好一些也更直觀。所以,可以將一些平台無關的模塊抽離出來直接在vs上進行性能測試,所做的工作只是寫一個簡單的main函數而已。

可以參考本人的博客

Linux下C++ 性能測試工具GPROF()入門教程

Linux環境下C++單元測試Gtest 入門


Linux上開一個Samba,然後在Windows上映射為網路磁碟

在vs里寫,在linux那邊make,如果所有的代碼都是跨平台的,就可以在vs里調試

缺點是打開文件的速度會稍微慢一點


相比於gdb而言vs下面調試著實方便一些。注意只調用ansiC的介面基本可以做到跨平台,但是局限性還是蠻大的。


codetyphon 可以做到,親自測試成功。。而且通吃所有linux版本,從各種伺服器到各種嵌入式linux,包括安卓系統。


如果是自己玩玩,上面答案都可以試試,不算好用但是都算可以用。如果是多人開發,試過各種方案,經常一個不小心就出各種問題。比如中文編碼,回車換行,svn 代碼覆蓋等等


推薦閱讀:

最短的可以造成 crash 且編譯器無法優化掉的 C++ 代碼是什麼?
在c中為什麼經常看到for( ; ; )這樣的語句,而不直接用while(1)?
為什麼大多數的C++的開源庫都喜歡自己實現一個string?
C++或QT項目如何進行CI(Continuous Integration)?
Clang 解析錯誤和報錯的機制?

TAG:編程 | Linux | C編程語言 | C | MicrosoftVisualStudio |