2013-03-04 18 views
7

Şu anda Windows ile ana işletim sistemi olarak çapraz derleme için SCons kuruyorum. Çapraz derleyici için özel bir Environment yapıyorum, ancak SCons her başlattığımda Visual Studio'yu aramakta ısrar ediyor (ve bunu bulamadığım için bir uyarı yazıyor, çünkü yüklü değil). Kullanmayacağımı bildiğim standart araçları aramasını engelleyebilir miyim?SCON'ları standart araçlar aramasını önleme

cevap

6

bunu yapmak için en az 2 yolu vardır, ilk yolu en kolay, aşağıdaki gibi, derleyici belirterek ortamı oluşturmayı deneyin:

env = Environment(CC = '/path/to/the/compiler') 

Muhtemelen yollarını eklemeniz gerekir linker ve diğer araçlar da. Sonra SCons onları aramamalı.

aşağıdaki SCons man page ait YAPILANDIRMA DOSYASI REFERANS bölümünde belirtildiği gibi Environment() işlevi tools bağımsız değişken ile çapraz derleyici için bir araç tanımlama oluşturmak olacaktır yapmanın bir başka yolu söz edilir:

Ayrıca

, isteğe bağlı bir anahtar değişken olarak belirtilebilir ortamı başlatmak için hangi araçlar belirli bir grubu:

env = Environment(tools = ['msvc', 'lex'])Ayrıca kendileri iki eleman listeleri olabilir

env = Environment(tools = ['default', 'foo'], toolpath = ['tools'])

... araçlar listesinin

bireysel elemanlar:

Olmayan yerleşik araçlar takım yolu argümanı kullanarak belirtilebilir formun (toolname, kw_dict). SCons, için yukarıda açıklandığı gibi araç adı belirtim dosyasını arar ve aracının üretme işlevine bir anahtar kelime argümanı olarak bir sözlük olması gereken kw_dict değerini geçirir. Oluşturma işlevi, aracın davranışını ortamını farklı yollarla ayarlayarak ya da başka şekilde başlatmayı değiştirerek argümanlarını kullanabilir.

araçları/my_tool.py:

def generate(env, **kw): 
    # Sets MY_TOOL to the value of keyword argument 'arg1' or 1. 
    env['MY_TOOL'] = kw.get('arg1', '1') 
def exists(env): 
    return 1 

SConstruct: Bu

env.SetOption('warn', 'no-visual-c-missing') 
gibi

env = Environment(tools = ['default', ('my_tool', {'arg1': 'abc'})], 
        toolpath=['tools']) 
+0

Bu mükemmel yanıt için teşekkür ederiz. İkinci yaklaşımla gidiyorum, ihtiyacım olana benziyor. –

+0

@ BjörnPollex, yardımcı olmaktan mutluluk duyuyoruz :) – Brady

+2

Bu çözüm maalesef uyarının problemini çözmedi.Buradaki problem, özel bir ortam yaratmamıza rağmen, 'DefaultEnvironment' hala varsayılan araçlarla başlatılmış olmasıdır. Bir DefaultEnvironment (tools = []) 'eklemek bunu düzeltdi. –

1

Sen baskılayabilir uyarılarÖrneğin, ARM Cortex-M mikroişlemcileri için çapraz derleme yapıyorum Bunu yapıyorum

cross = 'arm-none-eabi-' 
toolchain = { 
    'CC': cross + 'gcc', 
    'CXX': cross + 'g++', 
    'AR': cross + 'ar', 
    'AS': cross + 'gcc', 
    'OBJCOPY': cross + 'objcopy', 
    'SIZE': cross + 'size', 
    'PROGSUFFIX': '.elf', 
} 

env = Environment(tools=('gcc', 'g++', 'gnulink', 'ar', 'as'), ENV=os.environ) 
env.SetOption('warn', 'no-visual-c-missing') 
env.Replace(**toolchain) 
+0

DefaultEnvironment (tools = []) eklerseniz, her oluşturulan Ortam() için araçların açık bir şekilde listelendiğini ve listelerin msvc, msvs vb. Içermediğini varsayarak uyarıyı bastırmanız gerekmemelidir. – bdbaddog