2009-01-27 38 views
18

'u kullanarak komut satırından bir önişlemci değeri tanımlayın Birden çok projeden oluşan büyük bir uygulamanın bir demo sürümünü oluşturmam gerekiyor. Ben mevcut projeleri kullanmak istiyorum ve sadece önişlemci direktifleri aracılığıyla işlevselliği nötrdürMSBuild

#if DEMO 
    mycode.NeuterNow(); 
#endif 

Biz MSBuild kullanarak bizim app inşa ediyoruz ve ben ideal çizgisinde bir şey kullanırsınız:

MSBuild -DefineProperty:DEMO MySolution.sln 

Böyle bir işlev var mı?

cevap

9

That's a duplicate of this one ve evet,/p: DefineConstants düzgün çalışıyor ve yapılandırıcı haklı, bu, Proje Dosyası'nda (daha iyi IMHO olan) önceden tanımlanmış olan TÜM koşullu sembolleri geçersiz kılar, böylece hepsini tanımlamanız gerekir. .

+0

Geçersiz kılmanın bir yolu var mı? – Tsury

14

Sen DEBUG dahil etmek veya BIRAKMA ve diğer sabitler zaten çözüm dosyasında tanımlanan zorunda

msbuild /p:DefineConstants=DEBUG;DEMO MySolution.sln 

deneyin ama bu işe gerektiğini düşünüyorum. Feragatname: Asla kendim denemedim.

+0

/p: DefineConstants = DEMO ikinci ":" bir "=" olması gerekiyor – BrianH

+0

Teşekkürler, yanıtı çözdüm. – configurator

3

Bu soruna kendi çözümümü ararken ilginç bir şey keşfettim ve paylaşacağımı düşündüm.

MSBuild'deki/p yönergesi, bir yapı dosyasında zaten var olan özelliklerle sınırlı değildir. Herhangi bir şey ayarlamak için kullanabilirsiniz.

Yani, örneğin, daha sonra $ (featureset) ve ile önişlemci direktifleri kurşun manuel clobber ve diğer önişlemci respecify zorunda kalmadan

MSBuild solution.sln /p:FeatureSet=DEMO 

buna göre # tanımlanmış olur, örneğin olarak MSBuild çağrı Çalıştığınız direktifler.

Bu çalışmaları VS2010'da doğruladım. MSBuild olmadan Visual Studio'da yapılan bir yapı için FeatureSet'i nasıl tanımlayacağınızdan tam olarak emin değilsiniz.

+1

Bana bunun tam bir örneğini verebilir misiniz? Bunu tam olarak nasıl yapacağımı anlayamıyorum ... – ChrFin

+0

Yine, bu sadece VS2010. Daha sonraki versiyonları bilmiyorum. Önişlemci yönergeleri, proje özelliklerinde, C++ - önişlemci yapılandırması altında, noktalı virgülle ayrılmış öğeler listesidir. Listeye $ (Variable) öğesini manuel olarak ekleyin, ardından MSBuild'i komut satırından çağırdığınızda/p: Variable = FOO ve #ifdef FOO gibi şeyler buna cevap verecektir. – Glazius