[英]Can I use the C# preprocessor to skip Kinect v2.0 code?
快速問題,我正在開發一個小程序,希望與Kinect版本1和2一起使用。是否可以使用預處理程序命令,以便c#編譯器在沒有的情況下跳過我的Kinect v2.0代碼安裝了Kinect 2.0 SDK? (例如,當我在Windows 7上工作時)。
基本上是這樣的:
#if KINECT1
// ... kinect1 specifict code
#endif
#if KINECT2
// ... kinect2 specific code
#endif
當然,您將必須手動定義這些符號,編譯器或框架中沒有內置功能來檢測可用的版本(如果有的話)。
您可能可以通過使用MSBuild檢測到任何已安裝的Kinect SDK(版本)。 例如,查找特定的注冊表項,本地驅動器上的路徑和/或設置環境變量,然后從項目文件內部設置這些符號。
例如,在.csproj
文件的頂部包含以下片段(或將其放入您<Import>
的單獨文件中)。
<PropertyGroup Condition="Exists('C:\Program Files\...\Whatever\v1.0')">
<DefineConstants>KINECT1;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="Exists('C:\Program Files\...\Whatever\v2.0')">
<DefineConstants>KINECT2;$(DefineConstants)</DefineConstants>
</PropertyGroup>
(請記住,以上雖然只是一個示例,但不知道檢測kinect版本是什么“觸發”)。
更新
@斯科特·張伯倫的評論有所幫助。 實際上,Kinect 1.0 SDK設置了KINECTSDK10_DIR
環境變量,而2.0 SDK設置了KINECTSDK20_DIR
環境變量。
因此,您可以執行以下操作( 這可能也會有所幫助):
<PropertyGroup Condition="'$(KINECTSDK10_DIR)' != '' and Exists('$(KINECTSDK10_DIR)')">
<DefineConstants>KINECT1;$(DefineConstants)</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(KINECTSDK20_DIR)' != '' and Exists('$(KINECTSDK20_DIR)')">
<DefineConstants>KINECT2;$(DefineConstants)</DefineConstants>
</PropertyGroup>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.