也談ObjectARX多版本批量編譯
by edata 2017-12-10
因某些原因,我的電腦系統依舊是windows XP,所以能安裝的vs最高版本是vs2010,以下均在vs2010上實現,其他更高vs一樣可以實現,原理是一樣的。
我的方式比較特殊,采用的是(hightflybird)的多版本解決方案,參見:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=172590&extra=page%3D1%26filter%3Dauthor%26orderby%3Ddateline
安裝vs2010,其他版本均只有vc編譯器。
一、准備工作:
1. 安裝Daffodil.ENU,下載地址:http://daffodil.codeplex.com/releases/view/55712
2. 解壓綠色的vc編譯器。(或者全部安裝各版本的vs)。
二、安裝完Daffodil.ENU后,打開xp系統C:\Program Files或win7以及更高系統C:\Program Files(x86)文件夾(以下簡稱Program Files,不再區分)。
在Program Files文件夾依次打開C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms
我們先打開Win32\PlatformToolsets,下面有v60~v100等文件夾。
先用文本軟件如notpad++打開v60文件夾下的Microsoft.Cpp.Win32.v60. props
在notpad++的語言菜單下,選擇xml 語法高亮。
我們主要對<VCInstallDir> <IncludePath> <LibraryPath>進行修改和添加
<VCInstallDir></VCInstallDir>之間改成如<VCInstallDir>E:\vc\vc6\</VCInstallDir>
注意vc6后面一定要加一個”\”,不然后面的目錄無法識別這個路徑。
在這個之后添加一個新的自定義標記
<MyARXDir>C:\ObjectARX 2002\</MyARXDir>
這個是指定ARX SDK的文件夾位置,MyARXDir是我自己定義的,后面可以用到。
繼續添加 <MyPlatform>x86</MyPlatform> ,這個也是自定義,后面用到。
向下尋找< IncludePath>標記,在<IncludePath Condition="'$(IncludePath)' == ''">之后添加一個新的包含路徑,$(MyARXDir)inc;這個MyARXDir就是我們剛剛定義的,直接用$(標記)的方式引用過來了。
同上繼續尋找<LibraryPath Condition="'$(LibraryPath)' == ''">,在這后面添加$(MyARXDir)lib;,
繼續在</PropertyGroup>之前(注意這里寫的是之前)添加一個新的標記
<CharacterSet>ASCII</CharacterSet>
表示這個v60采用的是字符集是 “使用多字節方式”。
以下是完成后的截圖(注意:我這里vc6是安裝版的,所以VCInstallDir沒有修改)
同樣的方式,我們修改v70文件夾下的Microsoft.Cpp.Win32.v70. props
其他原理同上不再解釋,僅僅提供圖片參考。
這里需要注意的是,我采用的是綠色版的v70編譯器,修改了路徑以及
<WindowsSdkDir Condition="'$(WindowsSdkDir)' == ''">$(VCInstallDir)PlatformSDK\</WindowsSdkDir>
這個標記是指定windowsSDK的位置,MFC程序會用到這個路徑。
繼續v80改造
見圖,注意v80,也就是ARX2007開始字符集集是unicode,向導默認的是unicode那個CharacterSet就可以不要了,或者將ASCII改為Unicode。
繼續v90
繼續v100
以上我們的win32平台改完了。
現在看看x64
V80x64
V90x64
V100x64
MSBuild部分全部改完了。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面要對arx wizard向導修改了。
向導部分建議先按照我另外一個博文修改修改,修復一些常見問題。
詳見:http://www.cnblogs.com/edata/p/6821379.html
我采用的向導版本是arx wizard2012,原因是這個版本在vs2010中有工具條,方便添加命令。以及自定義實體類的相關派生繼承類。Arx2013開始就沒有工具條這玩意了。。
打開路徑C:\Program Files\Autodesk\ObjectARX Wizards for AutoCAD 2012\ArxAppWiz\Scripts\1033
右鍵notepad++ 打開default.js文件
修改中間目錄config.IntermediateDirectory ='$(Configuration)\\';
修改,注意我們這里終於用上了前面定義的MyPlatform,這樣我們生成的文件名就變成了
sk_ArxProject2.R19d.x86.arx這樣的格式。
if ( bDotNetModule ) LinkTool.OutputFile ='$(outdir)' + szRds + strProjectName + '.$(Configuration)' + '.$(MyPlatform)' +'.dll' ; else if ( bArxAppType ) LinkTool.OutputFile ='$(outdir)' + szRds + strProjectName + '.$(Configuration)' + '.$(MyPlatform)' + '.arx' ; else LinkTool.OutputFile ='$(outdir)' + szRds + strProjectName + '.$(Configuration)' + '.$(MyPlatform)' +'.dbx' ;
修改debugtool自動加載
上面那個strAcadPath是acad的路徑,定義在最后的部分,我用的是cad2011調試,根據自己的情況更換成默認的版本。
現在基本上改完了,那么我們這么折騰有什么意義呢。。
下面就簡單介紹一下。
下面要新建新的解決方案配置,先來個R19d基於debug的,如果是Release我會直接用R19,基於release,這里建議先從高版本開始新建配置,R19 R18 R17 R16 R15,(如果是向導生成的不建議直接用R15,因為向導的代碼和R15的差異太大,修改起來得不償失,可以通過R15升級到R19,也就是我安裝vc6的其中一個原因。通過vc6新建arx項目,再通過vs2010打開升級到vs2010項目,修改一些附加庫,現在這個R15版本很少用,具體不再講述。)
下面修改一下配置對應的平台,除了R16之外是win32,其他均是所有平台。
全部成功。
后記:通過這種方式建立arx項目,不需要再去設置其他的東西,如包含目錄,庫目錄。即可正常使用,當然,如果是需要額外的arxsdk,如brep之類的,還是需要設置的。也可以采用前面的方式吧相應的庫和包含路徑添加上去。真正實現一勞永逸。實際上理論上通過向導也可以自動生成R19d,R18d,這樣的配置,還需要繼續研究,剩下的就看你們的了。
另外能不能在vs2010上編譯R21,R20項目,也許還有R22,我可以很你們答案是可以的。至於怎么實現,也和這個差不多的,也許是下一遍博文了,也許沒有了。^_^。
Ps:鍵盤壞了,碼字費力,一按到ESC鍵盤,就關機。。
附上修改后的文件,供參考
參考文件下載 :下載