/ / GCC #error, ktorý neporuší ďalšiu kompiláciu - c ++, gcc

GCC #error, ktorý neporuší ďalšiu kompiláciu - c ++, gcc

Mám niekoľko jednoduchých makier, ktoré existujú v niektorých súboroch v rámci veľkého projektu, ktorý obsahuje a #error, Všetci nasledujú túto štruktúru viac-menej:

#ifdef COMPFAIL
#pragma message "Compilation Has Failed"
#error
#endif

Chcem nastaviť projekt tak, aby, ak COMPFAIL je definovaná, #pragma v každom súbore nastane kompilácia, ktorá nakoniec zlyhá. Teraz chápem to, kedy #error nazýva sa, zastaví kompiláciu na mieste, nepokúša sa zostavovať žiadny z ostatných súborov definovaných v mojom Makefile a zabráni všetkým ďalším #pragma hovory od vysielania. Existuje nejaký spôsob, ako donútiť kompilátor pred dokončením predbežného spracovania naprieč všetkými súbormi?

odpovede:

2 pre odpoveď č. 1

Veľmi jednoduchý test:

#error foo
#error bar

Kompilácia tohto súboru pomocou gcc prináša nasledujúce výsledky:

t.c:2:2: error: #error foo
#error foo

t.c:3:2: error: #error bar
#error bar

Je to zrejmé #error úplne nezastaví zostavu súboru. Ak by to bolo, iba prvé chyby by boli "hlásené a kompilácia by sa" zastavila. Ale po #error, kompilátor pokračuje a pokračujepreprocesovať a zostavovať zvyšok kódu. Je to však zbytočné, pretože kompilátor nebude produkovať objektový súbor, akonáhle sa vyskytne chyba, takže mi nie je jasné, aký prínos očakávate od pokračujúceho preprocesovania tohto súboru.

Teraz, pokiaľ ide o všetky ostatné súbory, ktoré sa zostavujúcez makefile, ktorý úplne nesúvisí s tým, čo robia akékoľvek pragma alebo smernica, pokiaľ to zostavuje alebo predspracuje zvyšok súboru. make skončí s nenulovým kódom ukončenia, zastaví vykonávanie ďalších príkazov. Ak to chcete zmeniť, použite -k ako už bolo spomenuté.

Upozorňujeme, že -k možnosť nemá žiadny priamy význam na tom, či #error preruší alebo nezruší okamžitú kompiláciu po ruke. Či tak alebo onak, kompilácia sa zastaví s nenulovým kódom výstupu a to je hnací faktor tu.