2009-04-05 5 views
5

Mi sono imbattuto in ciò che segue e mi chiedo quali implicazioni avrà sul mio ambiente cygwin/gnu dovrei usare qualcosa di diverso da -o per denominare l'output di una compilazione? È stato adottato un nuovo standard e gli altri compilatori vi aderiscono?Perché -o un candidato per l'eliminazione dal compilatore e dal linker Microsoft?

Quale sarebbe la motivazione per rimuovere -o?

DOS> tipo compile.bat

cl.exe -D YY_MAIN = 1 lex.yy.c libfl.obj -o pippo

DOS> compilare

cl.exe -D YY_MAIN=1 lex.yy.c libfl.obj -o foobar 
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.21022.08 for 80x86 
Copyright (C) Microsoft Corporation. All rights reserved. 
lex.yy.c 
Microsoft (R) Incremental Linker Version 9.00.21022.08 
Copyright (C) Microsoft Corporation. All rights reserved. 
/out:lex.yy.exe 
/out:foobar.exe 
lex.yy.obj 
libfl.obj 

cl: avviso riga di comando D9035: l'opzione 'o' è stata deprecata e verrà rimossa in una versione futura

Su data: Come la risposta seguente è cercando di rendere intenzionalmente più di una frattura tra Windows e UNIX? Spero di no. Spero che manchi qualche nuova convenzione adottata da tutti i compilatori là fuori.

risposta

2

non avrei necessariamente vedere uno scopo nefasto dietro quella - è più probabile che sia qualche cosa di compatibilità legati (forse -o sta interferendo con qualche accumulo sistema o l'altro utilizzato da qualche grosso cliente Microsoft o l'altro.)

Tuttavia, è è fastidioso quando un venditore di compilatori getta pratiche radicate e riflessi appreso.

Ma le differenze (sintattiche e filosofiche) tra i compilatori Microsoft ei compilatori Unix sono più grandi di una semplice opzione della riga di comando. A tal fine, potresti provare ad allontanarti da semplici script di compilazione batch e verso Makefile - o, meglio ancora, da un vero sistema di compilazione multipiattaforma come CMake o SCons (tieni presente che sono solo esempi, non sono sposato con qualcuno di loro :)).

+0

Ho l'opzione -o seppellita profondamente all'interno di una struttura piuttosto complessa per le build cross-platform. L'esempio era di farla bollire nel modo più semplice possibile. – ojblass

+0

Vedo - questo fa schifo allora ...Tuttavia, potrebbe esserci un lato positivo (o, piuttosto, un lato leggermente meno scuro) - "sarà rimosso in una versione futura" potrebbe significare @ VS2025, e quindi potrebbe non averne più bisogno ... –

+0

Molto tardi, ma immagino che '-o' sia stato deprecato quando è stato introdotto' -O' per le ottimizzazioni, probabilmente in un momento in cui le opzioni del compilatore erano insensibili al maiuscolo/minuscolo. Sono sensibili alla distinzione tra maiuscole e minuscole ora, quindi è necessario tornare indietro nella cronologia del compilatore, possibilmente di nuovo nei giorni DOS ... – andlabs

2

Sì. Dovresti usare /F per impostare le opzioni di output del compilatore.

+0

Tecnicamente si risponde direttamente alla risposta, ma io sto cercando una motivazione per questo. – ojblass

+0

Probabilmente non è malvagio, solo alcuni hanno pensato che dovesse succedere. Solo il team di compilatori saprà per certo. –

3

Gli argomenti della riga di comando su Windows sono diversi dagli argomenti della riga di comando su Unix. Solitamente iniziano con/invece di a -, e gli argomenti su cl.exe non corrispondono necessariamente a quelli di cc su Unix.

Sembra che l'opzione che stai cercando è /Fe

+0

Ma perché fare più differenze? – ojblass

+0

Windows è un sistema operativo diverso da Unix. Windows è cresciuto da DOS, che aveva radici in CP/M, che era ispirato alla famiglia DEC di ambienti a riga di comando, che utilizzava/per il prefisso gli switch sulla riga di comando. Questo è anche il luogo in cui è nato CRLF per le terminazioni di linea. –

+0

Molto vecchio, ma: 'cl' (e tutti gli strumenti di sviluppo Microsoft) accettano' -' anche per i flag di opzione. – andlabs

Problemi correlati