2009-08-05 39 views
8

Tôi đang cố tạo một mã nhỏ hoạt động trên nhiều nền tảng và trình biên dịch. Tôi sử dụng các xác nhận, hầu hết trong số đó có thể được tắt, nhưng khi biên dịch với PGI pgicpp sử dụng -mp để hỗ trợ OpenMP, nó sẽ tự động sử dụng tùy chọn --no_exceptions: ở mọi nơi trong mã của tôi với câu lệnh "ném" tạo ra lỗi trình biên dịch gây tử vong. ("hỗ trợ xử lý ngoại lệ bị tắt")Phát hiện trình biên dịch với #ifdef

Có macro define d Tôi có thể kiểm tra để ẩn các câu lệnh throw trên PGI không? Tôi thường làm việc với gcc, trong đó có GCC_VERSION và các loại tương tự. Tôi không thể tìm thấy bất kỳ tài liệu nào mô tả các macro này trong PGI.

+0

clang http://stackoverflow.com/questions/2658461/what-predefined-macro-can-i-use-to-detect-clang | VC http://stackoverflow.com/questions/15127522/how-to-ifdef-by-compilertype-gcc-or-vc –

Trả lời

12

Hãy xem dự án Pre-defined C/C++ Compiler Macros trên Sourceforge.

Trình biên dịch PGI có macro __PGI.

Ngoài ra, hãy xem libnuwen's trình biên dịch.hh tiêu đề cho một cách phong nha để 'chuẩn hóa' phiên bản trình biên dịch macro.

+0

Liên kết thứ hai đã chết :( –

4

Bạn có thể thử này để xem những gì các macro được định nghĩa trước bởi trình biên dịch:

pgcc -dM 

Có lẽ đó sẽ tiết lộ một macro phù hợp bạn có thể sử dụng.

+1

Thật vậy. Kết quả đầu ra được hiển thị tại http://www.pgroup.com/support/tprs_70.htm và có __PGI (đã đề cập ở trên) và __PGIC__, __PGIC_MINOR__ và __PGIC_PATCHLEVEL__, cung cấp các phần chính, nhỏ và chắp vá số phiên bản trình biên dịch. –

+0

Và có niềm vui của trình phân tích cú pháp lấy hai dấu gạch dưới và làm những điều thú vị với chúng. 'PGI' được bắt đầu bằng dấu gạch dưới kép; ba nhóm còn lại có cả tiền tố và hậu tố. –

0

Bạn đã xem xét tiêu đề tăng chưa? Giả sử họ hỗ trợ PGI, họ sẽ tìm ra cách để phát hiện ra nó. Bạn có thể sử dụng nó. Tôi sẽ bắt đầu tìm kiếm ở đâu đó trong số boost/config.

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