2013-03-27 6 views
11

से संकलित करते समय पथ शामिल करें मैं संकलन के दौरान अपने प्रोजेक्ट समूह द्वारा उपयोग किए जाने वाले अतिरिक्त पथ जोड़ने की कोशिश कर रहा हूं। चूंकि सी ++ बिल्डर 2010msbuild का उपयोग करता है मैंने इसके लिए प्रलेखन को देखने का प्रयास किया है और मुझे जो भी मिल सकता है उसके अनुसार अतिरिक्त लाइबपाथ एक संपत्ति के रूप में पास योग्य होना चाहिए। i.eअतिरिक्त लाइब्रेरी जोड़ना और कमांड लाइन

msbuild /p:AdditionalLibPaths=C:\FooBar\Libs /t:build foo.groupproj 

लेकिन यह मेरे द्वारा जोड़े गए पथों का उपयोग नहीं करता है। मैं पहले देखा है कि कुछ संपत्ति के नाम कुलपति ++ और सी ++ बिल्डर के बीच भिन्न जब MSBuild और आश्चर्य के लिए पारित किया है, तो सी ++ बिल्डर कुछ अन्य संपत्ति के नाम का उपयोग हो सकता है अतिरिक्त lib जोड़ने और फ़ोल्डरों शामिल करने के लिए?

मैं को प्रोजेक्ट में परिभाषित मौजूदा पथ को प्रतिस्थापित नहीं करना चाहता हूं बल्कि अतिरिक्त जोड़ना चाहता हूं। इसके लिए तर्क यह है कि जब परियोजना हमारे बिल्ड सर्वर पर बनाई जाती है तो कुछ पुस्तकालय एक मानक स्थान पर रहते हैं जो कि विकास मशीन पर कहां से स्थापित हो सकता है।

MSBuild acutally एक MSBuild स्क्रिप्ट फ़ाइल बारी टैग का उपयोग कर .groupproj सहित अतिरिक्त स्क्रिप्ट्स कॉल में है कि कहते हैं। मुझे पता है कि msbuild का एक नया उदाहरण टैग का उपयोग करते समय बनाया गया है, इसलिए मुझे पता है कि मुझे अपनी स्क्रिप्ट में उस कार्य को चलाने के दौरान संपत्ति को जोड़ना होगा।

<MSBuild Targets="Build" Projects="..\Foo.groupproj" Properties="Config=Debug (property to add additional paths here!)" /> 

अद्यतन:

सी ++ बिल्डरIncludePath और ILINK_LibraryPath का उपयोग करने की लेकिन इन रास्तों को पहले से ही इस परियोजना फ़ाइल में परिभाषित के ऊपर लिख स्थापित करने लगता है। चूंकि यह फ़ाइल आईडीई द्वारा बनाई और बनाए रखी गई है, इसलिए ओवरराइट के बजाय इसे जोड़ने के लिए कोई भी परिवर्तन आईडीई द्वारा ओवरराइट किया जाएगा। किस तरह की अजीब है, क्योंकि ऐसा लगता है कि यह वास्तव में मानों को संशोधित करना चाहिए

<IncludePath>..\FooBar\;$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;Common Components;..\Config\Config32;$(IncludePath)</IncludePath> 

अद्यतन 2:

में CodeGear.Cpp.Targets मैं अपने खुद के संपत्तिAdditionalIncludePaths कहा जाता है संपत्ति समूह पथ शामिल करने के साथ झुकाव।

लाइन 251

<PropertyGroup> 
     <BCC_NoLink>true</BCC_NoLink> 
     <ILINK_OSVersion Condition="'$(ILINK_OSVersion)'=='' And '$(NoVCL)'!='true'">5.0</ILINK_OSVersion> 
     <DCC_GenerateCppFiles>true</DCC_GenerateCppFiles> 
     <ShowStdOut Condition="'$(ShowStdOut)'==''">$(ShowGeneralMessages)</ShowStdOut> 

     <!-- _TCHAR mapping for Uni^H^H^H character selection --> 
     <StartupObj Condition="'$(_TCHARMapping)'=='wchar_t'">$(StartupObj)w</StartupObj> 
     <ILINK_StartupObjs Condition="'$(ILINK_StartupObjs)'==''">$(StartupObj)</ILINK_StartupObjs> 
     <BCC_GenerateUnicode Condition="'$(_TCHARMapping)'=='wchar_t'">true</BCC_GenerateUnicode> 
     <!-- Include Paths --> 
     <Win32LibraryPath Condition="'$(Win32LibraryPath)'==''">$(BDS)\lib</Win32LibraryPath> 
     <IncludePath Condition="'$(CBuilderIncludePath)'!=''">$(IncludePath);$(CBuilderIncludePath)</IncludePath> 
       <IncludePath Condition="'$(AdditionalIncludePath)'!=''">$(IncludePath);$(AdditionalIncludePath)</IncludePath> 
     <BCC_IncludePath Condition="'$(BCC_IncludePath)'!=''">$(BCC_IncludePath);$(IncludePath)</BCC_IncludePath> 
     <BCC_IncludePath Condition="'$(BCC_IncludePath)'==''">$(IncludePath)</BCC_IncludePath> 
     <BRCC_IncludePath Condition="'$(BRCC_IncludePath)'!=''">$(BRCC_IncludePath);$(IncludePath)</BRCC_IncludePath> 
     <BRCC_IncludePath Condition="'$(BRCC_IncludePath)'==''">$(IncludePath)</BRCC_IncludePath> 
     <DCC_IncludePath Condition="'$(DCC_IncludePath)'!=''">$(DCC_IncludePath);$(IncludePath)</DCC_IncludePath> 
     <DCC_IncludePath Condition="'$(DCC_IncludePath)'==''">$(IncludePath)</DCC_IncludePath> 
     <DCC_UnitSearchPath>$(DCC_IncludePath);$(Win32LibraryPath)</DCC_UnitSearchPath> 
     <DCC_ResourcePath>$(DCC_IncludePath)</DCC_ResourcePath> 
     <DCC_ObjPath>$(DCC_IncludePath)</DCC_ObjPath> 
     <TASM_IncludePath Condition="'$(TASM_IncludePath)'!=''">$(TASM_IncludePath);$(IncludePath)</TASM_IncludePath> 
     <TASM_IncludePath Condition="'$(TASM_IncludePath)'==''">$(IncludePath)</TASM_IncludePath> 

के आसपास तो मैं

msbuild /t:build /p:AdditionalIncludePaths=C:\Foo\Include foo.groupproj 

कॉल कर सकते हैं यह ठीक काम करता है और जो मैं चाहता है। मुझे पुस्तकालय पथों के साथ ही ऐसा करना होगा।लेकिन मैं इस तरह की एम्ब्रेडरोस की आपूर्ति की गई फ़ाइलों में से किसी एक को हैक करना नहीं चाहता हूं। यह सिर्फ हास्यास्पद है: पी ... क्या पथ और lib पथ जोड़ने के लिए सेट करने के लिए कोई आधिकारिक संपत्ति नहीं है?

उत्तर

10

VS2013 के लिए, बस चल MSBuild से पहले वातावरण चर को परिभाषित:

set "INCLUDE=%additional_include_path%;%INCLUDE%" 
set "LIB=%additional_lib_path%;%LIB%" 
REM use environment variables for INCLUDE and LIB values 
set UseEnv=true 

संदर्भ: MSBuild/Microsoft.Cpp/v4.0/V120/Microsoft.Cpp.targets

<Target Name="SetBuildDefaultEnvironmentVariables" 
     Condition="'$(UseEnv)' != 'true'"> 
... 
    <SetEnv Name ="INCLUDE" 
     Value ="$(IncludePath)" 
     Prefix ="false" > 
     <Output TaskParameter="OutputEnvironmentVariable"    PropertyName="INCLUDE"/> 
    </SetEnv> 

लेकिन दिखता है परियोजना गुणों में निर्दिष्ट अतिरिक्त शामिल/lib निर्देशिकाओं के पीछे शामिल INCLUDE और LIB की तरह।

1

सी ++ बिल्डर 10 सिएटल (2016 के रूप में वर्तमान संस्करण) में, मैं इस समस्या को हल करने में सक्षम था (अर्थात स्वचालित निर्माण में कस्टम लाइब्रेरी पथ को जोड़ने) msbuild चलाने से पहले वातावरण चर ILink_LibraryPath में अतिरिक्त पुस्तकालय पथ रख कर। यह set ILink_LibraryPath=... द्वारा किया जाना चाहिए, संपत्ति को /p:... से msbuild पर पास करके नहीं किया जाना चाहिए।

यह स्वचालित निर्माण वातावरण में अतिरिक्त पथ प्राप्त करता है, मौजूदा कोडों को पहले से ही .cbproj फ़ाइलों में सेट किए बिना, और एम्बरकेडेरो-आपूर्ति की गई फ़ाइलों में किसी भी हैक की आवश्यकता नहीं है।

इस दृष्टिकोण के साथ एकमात्र समस्या यह है कि अनुक्रम जिसमें व्यक्तिगत पथ की जांच की जाती है, गारंटी नहीं है - यानी पर्यावरण चर के माध्यम से आपूर्ति किए गए कस्टम पथ को .cbproj पथों में जोड़ दिया जाता है या संभवतः मध्य में डाल दिया जाता है, परियोजना सेटअप के आधार पर, और जरूरी नहीं है, इसलिए आपको परियोजना फाइलों में उल्लिखित अन्य निर्देशिकाओं में विरोधाभासी पुस्तकालयों के बारे में सावधान रहने की आवश्यकता नहीं है।

+0

बहुत उपयोगी उत्तर, धन्यवाद! इस पर्यावरण परिवर्तनीय के संबंध में, यदि हमें एक से अधिक मूल्य पथ प्रदान करने की आवश्यकता है तो सिंटैक्स कैसा दिखता है? –

+0

@ एनके-एफफोर्ड अर्धविराम के साथ अलग-अलग पथ – Cozzamara

संबंधित मुद्दे