微軟今天在官方MSDN博客上發(fā)文表示他們正在開發(fā)一個(gè)新的插件,一個(gè)能夠讓開發(fā)者在Visual Studio(以下簡稱VS)上建構(gòu)能夠在Linux上運(yùn)行C++程序的套件。開發(fā)者可以借由這個(gè)插件將C++程序移植到Linux服務(wù)器、PC以及移動(dòng)設(shè)備上,也同時(shí)可以借由這個(gè)插件將這些設(shè)備連接至VS??吹竭@個(gè)消息,網(wǎng)友紛紛表示,Visual Studio果然是宇宙第一IDE!
微軟還在博客中詳細(xì)介紹了該項(xiàng)目的使用方法,感興趣可閱讀如下原文:
目前我們僅支持在遠(yuǎn)端的目標(biāo)Linux機(jī)器提供建構(gòu)服務(wù)。我們并沒有限制特定的Linux發(fā)布版本,但我們?nèi)耘f在一些工具的表現(xiàn)上有些相依性的差異。需要特別注意的是,我們需要openssh-server、g++、gdb以及gdbserver。用你最習(xí)慣的套件管理工具來安裝他們,例如在Debian類型的Linux就可以使用:
sudo apt-get install openssh-server g++ gdb gdbserver
安裝
下載 Visual C++ for Linux Development extension 或從Visual Studio上的插件管理員來獲得。目前我們?cè)赩isual Studio上的Android Tools上已有相依支持。如果你已經(jīng)安裝了VS的話,你可以借由Add Remove Programs來新增這些功能,編輯VS然后在Visual C++移動(dòng)設(shè)備開發(fā)下選擇他們。
要開始一個(gè)新的項(xiàng)目可以透過以下路徑:Templates > Visual C++ > Cross Platform > Linux。
目前我們有三個(gè)可以使用的模板:針對(duì)像Raspberry Pi等物聯(lián)網(wǎng)裝置設(shè)計(jì)的Blink、最基本的應(yīng)用程序樣板Console Application以及讓開發(fā)者自己選擇需要加入的來源檔以及從預(yù)設(shè)設(shè)定起的Empty。
你的第一個(gè)VS Linux項(xiàng)目
我們從建構(gòu)一個(gè)主控臺(tái)app開始。從模板新增完你的項(xiàng)目后,在printf敘述句的地方設(shè)下一個(gè)中斷點(diǎn),然后敲擊F5或遠(yuǎn)端GDB除錯(cuò)器按鈕。根據(jù)預(yù)設(shè)值,這個(gè)主控臺(tái)app設(shè)定與debug/x64的環(huán)境相容。如果你的遠(yuǎn)端連線標(biāo)的是x86或arm架構(gòu),那你需要先改變上述設(shè)定。在我演示的這個(gè)范例我使用的是x64 Ubuntu VM。
由于這是第一次連結(jié)到標(biāo)的的Linux機(jī)器,所以會(huì)彈出一個(gè)連接資訊視窗,是由在建構(gòu)項(xiàng)目時(shí)所觸發(fā)的。
我們同時(shí)支持密碼以及認(rèn)證形式的驗(yàn)證方式,包含使用復(fù)雜密碼的認(rèn)證。在第一次成功連接后,我們會(huì)將你的連結(jié)資訊儲(chǔ)存以便在日后需要連接時(shí)快速存取。你可以從Tools > Options > Cross Platform > Linux的路徑來管理你已儲(chǔ)存的連結(jié)資訊,以及是的,密碼/復(fù)雜密碼是已加密形式儲(chǔ)存的。我們也同時(shí)計(jì)劃在未來的更新版本中,在連接時(shí)無需儲(chǔ)存連結(jié)資訊。
在連接的過程中,你的來源檔會(huì)被復(fù)制到遠(yuǎn)端的Linux機(jī)器上,并觸發(fā)gcc并根據(jù)項(xiàng)目的屬性設(shè)定來建構(gòu)原始碼。在項(xiàng)目建構(gòu)完畢之后,你的程序?qū)?huì)在遠(yuǎn)端的機(jī)器上執(zhí)行,并停止在我們先前所設(shè)下的中斷點(diǎn)上。
Linux項(xiàng)目屬性
我們可以借由以下的項(xiàng)目屬性來理解,東西是怎么被部署到遠(yuǎn)端Linux機(jī)器上的。
在remote settings下,你可以看到remote根目錄是預(yù)設(shè)在~/projects/,且該路徑下的遠(yuǎn)端項(xiàng)目目錄會(huì)與我們的項(xiàng)目名稱相符。從Linux機(jī)器上去看的話,我們可以在~/projects/ConsoleApplication1下發(fā)現(xiàn)建構(gòu)后的成品main.cpp。
根據(jù)項(xiàng)目的General setting,可以了解到我們針對(duì)Output以及Intermediate路徑是怎么設(shè)定的。除此之外,你可以發(fā)現(xiàn)到這個(gè)項(xiàng)目是被設(shè)定成一個(gè)應(yīng)用程序的—代表我們的項(xiàng)目執(zhí)行檔ConsoleApplication1.out是在bin/x64/Debug/路徑下。另外可以注意到的是,我們也同時(shí)支持靜態(tài)以及動(dòng)態(tài)的設(shè)定格式。
Linux物聯(lián)網(wǎng)項(xiàng)目
現(xiàn)在我們來研究物聯(lián)網(wǎng)裝置的部分—以Raspberry Pi為例。你可以使用任何類型的Pi來執(zhí)行Raspbian。在我們的Blink范例里我們使用wiringPi—如果你沒有這個(gè)安裝選項(xiàng)你也可以選擇從apt或來源檔來安裝。在Tools > Options搜尋Linux來新增一個(gè)連結(jié),然后點(diǎn)擊“add”來新增一個(gè)連結(jié)到你的Raspberry Pi。
從項(xiàng)目屬性設(shè)定的地方查看Build Events下的Remote Post-Build Events。
你可以借由這個(gè)設(shè)定在遠(yuǎn)端已建構(gòu)好項(xiàng)目的Linux標(biāo)的上執(zhí)行指令。這個(gè)模板已先預(yù)設(shè)了針對(duì)LED輸出的GPIO pin,所以我們不需要再以root的身份執(zhí)行我們的執(zhí)行檔。
現(xiàn)在將一個(gè)LED連接到Raspberry Pi上的pin 17位置(如下圖)。
打開main.cpp檔,并在第一個(gè)digitalWrite后delay call的地方設(shè)下中斷點(diǎn),然后敲擊F5。你可以看到你的LED燈亮起,且執(zhí)行程序會(huì)在你下中斷點(diǎn)的地方停住。將你的程序持續(xù)執(zhí)行到下一個(gè)digitalWrite call之后便可以看到LED燈熄滅。
可以透過瀏覽我們的物聯(lián)網(wǎng)研發(fā)專頁,來追蹤所有我們目前針對(duì)這樣的系統(tǒng)所釋出的功能。
桌面應(yīng)用程序
我們剛已在上述的文章中,介紹了無介面(headless)以及裝置型的Linux應(yīng)用程序,那桌面型的呢?在這里我們將介紹一點(diǎn)特別的:我們將在Linux桌面上執(zhí)行一個(gè)OpenGL應(yīng)用程序。首先要確定的是,你的Linux桌面已經(jīng)設(shè)定為包含OpenGL的環(huán)境,下述是我們會(huì)需要用到的apt套件:libgles1-mesa、libgles1-mesa-dev、freeglut3以及freeglut3-dev。
接下來請(qǐng)先創(chuàng)建一個(gè)空的Linux項(xiàng)目,然后前往 Julien Guertault’s OpenGL 教學(xué)下載旋轉(zhuǎn)方塊的來源檔,將其解壓縮并將main.c加到你的項(xiàng)目下。要能夠運(yùn)行Intellisense,你需要將OpenGL的標(biāo)頭(headers)新增到VC++ Directories,你可以從 OpenGL Registry 里下載他們?,F(xiàn)在前往你的項(xiàng)目屬性設(shè)定,然后新增export DISPLAY=:0.0到Pre-Launch command下。
然后,在Linker Input下新增“m;GL;GLU;glut”到Library Dependencies欄位。
另外,確認(rèn)你的遠(yuǎn)端設(shè)定是對(duì)應(yīng)到對(duì)的機(jī)器。
接下來按下F5。
還有一些有趣值得下中斷點(diǎn)的地方,例如大約在80行左右的位置有可以調(diào)整方塊旋轉(zhuǎn)的設(shè)定(試著調(diào)整看看alpha值),或在KeyboardFunc里可以檢查按下鍵盤時(shí)所輸入的值。(Source: MSDN)
廣告聲明:文內(nèi)含有的對(duì)外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時(shí)間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。