2013-03-13 15 views

Odpowiedz

18

Od clang --cc1 --help:

... 
-D <macro>    Predefine the specified macro 
... 

Jako zasada, zakładamy, że Clang emuluje GCC, chyba że zostanie udowodnione inaczej!

+0

Którą wersję języka używasz? Mój jest 3.3 i nie widzę tej opcji, kiedy robię 'clang -cc1 --help'. – shrm

+0

@mishr: Ach, wydaje mi się, że mam 3.1, gdzie jestem teraz. Jest mało prawdopodobne, że zmienili/usunęli taką podstawową opcję, chociaż ... –

+1

Zgadzam się na część, która jest nieprawdopodobna, ale opcja nie jest wyświetlana w pomocy. – shrm

4

Domyślna clang inwokacja jest kierowca gcc-jak kompilator, wspierając takie same opcje jak gcc, w tym -D:

: ~$ cat test/z.c 
int foo() { 
    return FOOBAR; 
} 
: ~$ clang -DFOOBAR -E -c test/z.c 
# 1 "test/z.c" 
# 1 "<built-in>" 1 
# 1 "<built-in>" 3 
# 154 "<built-in>" 3 
# 1 "<command line>" 1 
# 1 "<built-in>" 2 
# 1 "test/z.c" 2 
int foo() { 
    return 1; 
} 

Więc jeśli chcesz zastąpić gcc, po prostu powołać clang. clang -cc1 wywołuje komponent front-clang, a nie ogólny sterownik kompilatora.

+0

Już to robię. Ponieważ używam makefile, uruchamiam polecenie 'make cc =/path/to/clang'. Mam nadzieję, że to prawda. – shrm

+0

@mishr: ogólnie po prostu zastąpienie gcc clangiem powinno działać, ale istnieją zastrzeżenia dotyczące konkretnych przypadków i sekwencji budowania. czy otrzymujesz jakieś szczególne błędy? ponieważ -D * działa *. –

+0

Tak -D działa, dlatego zaakceptowałem powyższą odpowiedź. Kompilacja BTW idzie dobrze, połączenie nie jest wykonywane, a więc nie jest generowany plik wykonywalny. – shrm