Attualmente sto configurando SCons per la compilazione incrociata con Windows come sistema operativo host. Sto creando un custom Environment
per il cross-compiler, ma SCons insiste nel cercare Visual Studio ogni volta che lo avvio (e stampa un avviso che non riesce a trovarlo, perché non ce l'ho installato). Posso impedirgli di cercare strumenti standard che so che non userò?Impedisci alle SCons di cercare strumenti standard
risposta
ci sono almeno 2 modi per fare questo, il primo modo è il più facile, provare a creare l'ambiente che specifica il compilatore, come segue:
env = Environment(CC = '/path/to/the/compiler')
avrete probabilmente bisogno di aggiungere percorsi per il linker e altri strumenti. Quindi SCons non dovrebbe cercarli.
Un altro modo per farlo sarebbe quello di creare una definizione strumento per la cross-compilatore utilizzando l'argomento tools
sulla funzione Environment()
come menzionato nella sezione FILE DI CONFIGURAZIONE DI RIFERIMENTO del SCons man page, dove si precisa quanto segue:
Inoltre, uno specifico insieme di strumenti con i quali per inizializzare l'ambiente può essere specificato come argomento parola chiave opzionale:
env = Environment(tools = ['msvc', 'lex'])
attrezzi non integrati possono essere specificati utilizzando l'argomento percorso utensile:
env = Environment(tools = ['default', 'foo'], toolpath = ['tools'])
...
I singoli elementi della lista utensili può anche essere a loro volta liste di due elementi della forma (toolname, kw_dict). SCons cerca il file delle specifiche del toolname come descritto sopra e passa kw_dict, che deve essere un dizionario, come argomenti delle parole chiave per la funzione di generazione dello strumento . La funzione di generazione può utilizzare gli argomenti per modificare il comportamento dello strumento impostando l'ambiente in in modi diversi o modificando in altro modo l'inizializzazione.
strumenti/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:
env = Environment(tools = ['default', ('my_tool', {'arg1': 'abc'})],
toolpath=['tools'])
Si può sopprimere avvertimenti come questo
env.SetOption('warn', 'no-visual-c-missing')
Ad esempio, per eseguire la cross-compilazione per microcontrollori ARM Cortex-M, sto facendo questo
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)
Se si aggiunge DefaultEnvironment (tools = []), non è necessario sopprimere l'avviso assumendo che sia elencato esplicitamente anche gli strumenti per ciascun Ambiente creato() e che gli elenchi non includano msvc, msvs, ecc. – bdbaddog
Grazie per questa eccellente risposta. Vado con il secondo approccio, sembra più quello di cui ho bisogno. –
@ BjörnPollex, felice di aiutare :) – Brady
Questa soluzione purtroppo non risolve il problema dell'avvertimento.Il problema qui era che anche se creo un ambiente personalizzato, il 'DefaultEnvironment' è ancora inizializzato con strumenti predefiniti. L'aggiunta di un 'DefaultEnvironment (tools = [])' ha risolto questo problema. –