Tôi có thể sử dụng macro xác định trước nào để phát hiện tiếng kêu?


111

Tôi đang cố gắng phát hiện trình biên dịch được sử dụng để biên dịch mã nguồn của mình. Tôi có thể dễ dàng tìm thấy các macro được xác định trước để kiểm tra MSVC hoặc GCC ( ví dụ: xem http://predef.sourceforge.net/ ), nhưng tôi không thể tìm thấy bất kỳ macro nào để kiểm tra tiếng kêu.

Có ai đó biết nếu clang định nghĩa một macro như thế nào __CLANG__để biết những gì hiện đang biên dịch mã của tôi?



Câu trả lời:


120

Để có được danh sách tất cả các macro được xác định trước mà trình biên dịch sử dụng, hãy sử dụng cái này:

clang -dM -E -x c /dev/null

Bạn có thể làm tương tự cho gcc.


79

Tìm thấy câu trả lời bằng cách sử dụng strings+ grep:

$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__

41

Câu hỏi này đã được trả lời trong nhiều năm nhưng hãy để tôi thêm (để tham khảo trong tương lai) cách nó được thực hiện trong Windows :

echo | clang -dM -E -

giống như đối với GCC:

echo | gcc -dM -E -

Xin lưu ý: Dấu gạch ngang cuối cùng -thực sự quan trọng! (Nếu không, bạn nhận được error: no input filescho cả hai trình biên dịch)


8
FYI, Windows tương đương với /dev/nullisNUL:
hợp pháp hóa

@legalize Whoa! Tôi không biết điều đó! Điều đó khá tuyệt; bạn tìm thấy nó ở đâu?
MD XF

4
Nó đã có từ thời DOS, hầu hết người dùng DOS / Windows không bao giờ cần đến nó.
hợp pháp hóa

Đây là những gì tôi thường làm trong Linux. Đánh máy /dev/nulllà công việc nhiều hơn.
Peter Cordes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.