BREW Makefile 生成工具的編寫

2021-09-30 05:09:32 字數 1596 閱讀 6742

之前一直使用高通的brew makefile vc外掛程式來生成makefile,遇到了一些問題。

1.如果vc專案的檔案放在多個子目錄下的話,只會生成子目錄的c檔案規則,漏掉了cpp檔案規則。

2.標頭檔案包含目錄轉換有誤。會將包含環境變數的頭檔案目錄前後加上"字元。

除此之外,還有arm編譯器預設不能使用全域性變數等問題,不過可以靠修改brew sdk tools的模板檔案來解決。但前述三個問題,並沒有寫死在模板檔案裡,需要經常修改,很是麻煩。因此產生了自己寫乙個brew makefile 生成工具的想法。

一.microsoft.visualstudio.vcprojectengine

使用這個類以及vcproject類可以輕鬆得到專案包含的檔案以及專案的各種設定,省去了自己解釋.vcproj這個xml檔案的麻煩。具體使用方法可見

tool for converting vc++2005 project to linux makefile

二.vc外掛程式

參照上面的文章,製作了乙個生成makefile的命令列工具,使用上不如高通的vc外掛程式方便。經過查詢一些資料,發現製作乙個vc的外掛程式,也不是很困難的事情。vc裡甚至有乙個嚮導來幫助生成大部分輔助**(新建專案->其它專案型別->擴充套件性->visual studio外接程式)。這方面比較好的資料有

line counter - writing a visual studio 2005 & 2008 add-in

如果選擇用c#來編寫外掛程式,那麼嚮導會生成乙個connect.cs檔案。

這個檔案裡的onconnection方法決定了外掛程式的表現形式,是放到某個選單裡,還是放到工具欄裡。我在這裡碰到乙個問題,無法正確得到「tools」選單的中文名,最後不得已將選單名強制設為「工具」。

三、安裝程式

其實這個專案,我遇到的最大困難是製作乙個安裝檔案。我需要把外掛程式的.dll檔案和.addin檔案拷貝到目標電腦的「我的文件」下的相應目錄,並設定一些環境變數。vc裡也有乙個安裝工程(新建專案->其它專案型別->安裝和部署->安裝專案)。這個工程不用寫一行**,就可以把檔案拷貝到安裝程式指定的目錄下。但是我沒有發現簡單的解決我上面兩個需求的方法。直到我看到了這篇文章。

a custom action for deploying a visual studio 2005 add-in

基本的思路是繼承安裝程式類,除了執行基類的操作外,再寫**執行拷貝檔案、註冊環境變數等特殊操作。

四、其它問題

關於外掛程式從vs選單裡消失的問題,這個**也做了詳細解釋。

如果在外掛程式的onconnection事件裡,處理的connectmode是ext_connectmode.ext_cm_uisetup,則這個外掛程式的ui輸入永久加入。意思是vs第一次檢測到這個事件時,傳送ext_connectmode.ext_cm_uisetup給外掛程式,加入外掛程式ui,之後不會在主動傳送這個事件。如果這之後出現什麼問題,導致外掛程式ui丟失,就需要通知vs重新傳送這個事件。方法有二:

a.找到外掛程式的.addin檔案。將它移動到vs無法自動偵測的目錄。啟動一次vs。移回來,再次啟動vs。

vs又會認為這是乙個新外掛程式,並傳送uisetup事件。

b.啟動vs時加引數 devenv.exe /reset

vs會重置外掛程式,傳送uisetup事件

BREW Makefile 生成工具的編寫

之前一直使用高通的brew makefile vc外掛程式來生成makefile,遇到了一些問題。1.如果vc專案的檔案放在多個子目錄下的話,只會生成子目錄的c檔案規則,漏掉了cpp檔案規則。2.標頭檔案包含目錄轉換有誤。會將包含環境變數的頭檔案目錄前後加上 字元。除此之外,還有arm編譯器預設不能...

qmake生成Visual Studio工程

整個qt在windows中都可以通過批處理來編譯,當編譯好qt後,會生成qmake.exe。在沒有安裝qt vs addin的情況下,如何使用別人提供的qt pro專案檔案呢?使用qmake可以直接生成visual studio專案檔案,命令如下 qmake tp vc 如果不成功,可能還需要配置q...

qmake生成vs的vcproj sln工程

qmake生成的vs工程與環境變數中的 qmakespec相關,可以有兩種方法 1.預設情況下,即環境變數qmakespec為你裝的qt for vs的版本,預設生成的為該版本的vs工程,如,你裝的是qt for vs2010,那麼環境變數qmakespec win32 msvc2010,預設情況下...