2013-03-13 23 views

Trả lời

18

Từ clang --cc1 --help:

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

Như một quy tắc của ngón tay cái, giả sử rằng Clang giả lập GCC, trừ khi chứng minh khác!

+0

Bạn đang sử dụng phiên bản clang nào? Mine là 3.3 và tôi không thấy tùy chọn đó khi tôi thực hiện 'clang -cc1 --help'. – shrm

+0

@mishr: Ah, tôi dường như có 3.1 nơi tôi đang ở ngay bây giờ. Nó không chắc rằng họ thay đổi/loại bỏ một lựa chọn cơ bản như vậy, mặc dù ... –

+1

Tôi có xu hướng đồng ý về một phần không, nhưng tùy chọn không được hiển thị trong trợ giúp. – shrm

4

Giá trị mặc định clang gọi là một trình điều khiển gcc-như biên dịch, hỗ trợ các tùy chọn tương tự như gcc, bao gồm -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; 
} 

Vì vậy, nếu bạn muốn thay thế gcc, chỉ cần gọi clang. clang -cc1 gọi thành phần front-end của clang, không phải trình điều khiển trình biên dịch chung.

+0

Tôi đang làm điều đó rồi. Vì tôi đang sử dụng một makefile, tôi kích hoạt lệnh 'make cc =/path/to/clang'. Tôi hy vọng điều đó là chính xác. – shrm

+0

@mishr: nói chung chỉ thay thế gcc bằng clang nên hoạt động, nhưng có những cảnh báo cho trường hợp cụ thể và xây dựng trình tự. bạn có gặp phải bất kỳ lỗi cụ thể nào không? bởi vì -D * không * làm việc. –

+0

Có -D công trình, đó là lý do tại sao tôi chấp nhận câu trả lời ở trên. Việc biên dịch BTW sẽ ổn, việc liên kết không được thực hiện và do đó không thể thực thi được. – shrm

Các vấn đề liên quan