2013-02-19 17 views
9

के उपयोग को कम करने के लिए विजुअल स्टूडियो प्रॉपर्टी शीट बनाना, मैं एक सी ++ लाइब्रेरी (हेडर सेट, आयात libs और DLLs) का निर्माण कर रहा हूं। मैं इस पुस्तकालय का उपयोग किसी भी डेवलपर के लिए जितना संभव हो सके उतना आसान बनाना चाहता हूं जो इसका उपयोग करना चाहता है। विशेष रूप से मैं नहीं चाहता कि इस लाइब्रेरी के उपभोक्ताओं को अपने प्रोजेक्ट की सभी अलग-अलग कॉन्फ़िगरेशन (डीबग | रिलीज और x86/x64/ARM) के लिए मैन्युअल रूप से हेडर पथ, पुस्तकालय पथ और लिंक लाइब्रेरी को बदलने के बारे में चिंता करने की आवश्यकता हो। मुझे पता है कि मैं संपत्ति पत्रक का उपयोग कर ऐसा कर सकता हूं। मैंने इस उद्देश्य के लिए 6 अलग-अलग संपत्ति पत्रक बनाए हैं (प्रत्येक कॉन्फ़िगरेशन के लिए एक)। प्रत्येक पत्रक के नीचे की तरह दिखता है (लिस्टिंग सिर्फ 86 | डीबग संस्करण, मान लेते हैं कि मैक्रो INCLUDEPATH और LIBPATH सही ढंग से परिभाषित कर रहे हैं):सी ++ लाइब्रेरी

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <_PropertySheetDisplayName>MyCPPLib, 1.0</_PropertySheetDisplayName> 
    </PropertyGroup> 
    <ItemDefinitionGroup> 
    <ClCompile> 
     <AdditionalIncludeDirectories>$INCLUDEPATH;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> 
    </ClCompile> 
    <Link> 
     <AdditionalLibraryDirectories>$(AdditionalLibraryDirectories);$LIBPATH\x86\Debug</AdditionalLibraryDirectories> 
     <AdditionalDependencies>MyCPPLib.lib;$(AdditionalDependencies)</AdditionalDependencies> 
    </Link> 
    </ItemDefinitionGroup> 
</Project> 

मुझे पता है कि यह सिर्फ एक सहारा फ़ाइल जो कर सकते हैं बनाने के लिए यदि संभव हो तो चाहते हैं उपयोगकर्ता की सक्रिय कॉन्फ़िगरेशन के आधार पर सभी 6 कॉन्फ़िगरेशन का ख्याल रखना? वह फ़ाइल कैसा दिखाई देगी?

+1

ध्यान रखें कि किसी के लिए मानक "रिलीज" और "डीबग" कॉन्फ़िगरेशन से अधिक परिभाषित करने के लिए यह संभव है (यहां तक ​​कि संभवतः)। मैं कई परियोजनाओं को जानता हूं जो उदाहरण के लिए एक .dll बनाने के बनाम स्थिर लाइब्रेरी बनाने के बीच अंतर करने के लिए कस्टम कॉन्फ़िगरेशन को परिभाषित करते हैं। –

+0

@ बिलीओनेल निश्चित। मुझे अपनी लाइब्रेरी के लिए डिफ़ॉल्ट दो "डीबग" और "रिलीज" का समर्थन करने में खुशी होगी। मैं इस संपत्ति शीट सामान के लिए नया हूँ। क्या आप जानते हैं कि इन 6 संविधानों के लिए यह कैसा दिखता है? –

+1

हम्म, मैंने कुछ समय पहले ऐसा कुछ किया था। मैं कल इसे देखने के लिए याद रखने की कोशिश करूंगा। एहसास करने की कुंजी यह है कि ये वास्तव में केवल एमएसबिल्ड फाइलें हैं। और आप सादे एमएसबिल्ड में बस ठीक कर सकते हैं (लेकिन मुझे सिंटैक्स ऑफ-हाथ याद नहीं है)। मैंने पाया कि जब मैंने मूर्खतापूर्ण "दोनों को एक स्ट्रिंग में संयोजित करने के बजाय प्लेटफॉर्म से अलग कॉन्फ़िगरेशन (डीबग/रिलीज़) का इलाज करना शुरू किया, और फिर निर्माण सेटिंग निर्धारित करने के लिए इसका उपयोग करें" सम्मेलन मौजूद है डिफ़ॉल्ट रूप से वीएस परियोजना फाइलों में। :) – jalf

उत्तर

3

तुम बस के रूप में एक संरचना में अपने पुस्तकालय binaries स्थापित कर सकते हैं:

<toplevelsdkdir> 
    |-> lib 
     |-> x86 
      |-> Debug 
      |-> Release 
     |-> x64 
      |-> Debug 
      |-> Release 

और फिर बस एक ही परियोजना में व्यापक रंगमंच की सामग्री बनाने के इस तरह दायर:

<?xml version="1.0" encoding="utf-8"?> 
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <_PropertySheetDisplayName>MyCPPLib, 1.0</_PropertySheetDisplayName> 
    </PropertyGroup> 
    <ItemDefinitionGroup> 
    <ClCompile> 
     <AdditionalIncludeDirectories>$INCLUDEPATH;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> 
    </ClCompile> 
    <Link> 
     <AdditionalLibraryDirectories>$(AdditionalLibraryDirectories);$LIBPATH\$(PlatformTarget)\$(Configuration)</AdditionalLibraryDirectories> 
     <AdditionalDependencies>MyCPPLib.lib;$(AdditionalDependencies)</AdditionalDependencies> 
    </Link> 
    </ItemDefinitionGroup> 
</Project> 

आप आप चाहते हैं कर सकते हैं रजिस्ट्री से पढ़ने वाली जानकारी के साथ परिवर्तनीय INCLUDEPATH और LIBPATH को प्रतिस्थापित कर सकते हैं (जहां आप इसे इंस्टॉलेशन के दौरान रख सकते हैं):

<ClCompile> 
     <AdditionalIncludeDirectories>$([MSBuild]::GetRegistryValue(`HKEY_LOCAL_MACHINE\Software\MyCompany\MySDK\v1`, `InstallDir`))\INCLUDE;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> 
</ClCompile> 
संबंधित मुद्दे