Shaing's blog.

Stay hungry. Stay foolish.

[weekly 26]Visual Studio 2015 專案管理與設定

首先,先感謝同事:Aaron分享經驗與協助。目前專案有使用到2008與2015,再來要介紹的專案設定就以2015為主,當然因舊版會有一些差異但不會差太多。
最近利用一些空檔與同事整理了一些規則,方便日後從svn checkout下來可以在任何環境都沒有編譯與路徑問題,這一點小動作是必須的!
此外會帶到一些專案版本的衝突以及專案設定上的限制,要管理多份專案不容易,但掌握好一些原則,日後就很方便開發。

當開案vs會產生一份sln去管理所有proj,意思是你可以有多份proj在這份sln專案內,將相依的專案(libary)放在一起管理。

 

組態與相依性

sln我們會注意到這邊:
組態與平台就是依照需求去調整,至於相依性就是前面提到:如果有多份proj就必須要將相依設定好,這攸關建置順序,假如你有import libary當然就是要等lib建置完成才編譯主程式。
如下我有兩份proj,我要將lib_test相依於lib_sata_rw,並且將lib_test設定為起始專案:
proj屬性設定是跟著組態走的,所以當debug設置完成,並不代表Release也同步,此時必須要在檢查release設定是否有跟上,或者可以選擇所組態(如果兩種組態都使用相同設定的話)

 

屬性設定

再來會提到一些路徑上與編譯的相關設定,我們並沒有摸透所有設定,通常都是遇到困難時發現這麼做可以解決,除了網路資源外,自己也是親身驗證。
如下圖:
輸出目錄
編譯器版本
程式庫選擇
字元集
連結器設定
善用vs 2015提供的巨集,能夠在設定上更精準,選擇後還能夠預覽路徑(2008無預覽功能)。通常依據SolutionDir當基準是個不錯的選擇,並且增加platform去管理輸出目錄

 

其他include and libs(程式庫)

一份專案已經很難從頭到尾都自己刻,使用third party站在巨人的肩膀上是必須的。因為header和libary的路徑勢必要提供給編譯器知道。
尤其是一份多專案共用的程式庫,更需要將路徑設定的漂亮,不管誰從svn check out下來都可以順利編譯
下二例是上半年使用juce開發的專案,其中為inlude and libs的目錄路徑設定,順便一提:路徑還在juce的projucer中就要設定好。

 

程式庫編譯與連結

通常好樣的功能都會被抽離出來製作libary(程式庫),不僅方便內部開發,也可以open source出來,在msvc中特別會去檢查runtime libary的設定
簡單來說:如果以下設定不同,編譯連結程式庫會失敗,因為編譯器不知道該參照那一邊的設定,通常會產生一堆重複定義或者程式庫錯誤的衝突

 

新舊版本連結

error C1007:在 ‘-FitobjData’ 有無法辨識的旗標 ’p2’
此錯誤是發生在使用2008連結2015編譯的libary所產生的,確切原因網路上有許多說法,多半與版本有關,只要將2015所編譯的libary降至2008去編譯,錯誤就解決了。也許是剛好使用到某些較新程式庫而造成此問題(待解)。