2012-02-19 36 views
8

Với gcc và gfortran tôi có thể tạo ra một danh sách các macro preprossesor được xác định bởi trình biên dịch sử dụng (thay đổi nội dung để phản ánh câu trả lời ouah của)Tạo danh sách các macro tiền xử lý được xác định bởi trình biên dịch

gcc -E -dM - < /dev/null 

gfortran -cpp -E -dM /dev/null 

tương ứng (trên Linux ít nhất).

Làm cách nào tôi có thể thực hiện tương tự với các trình biên dịch Intel icc và ifort? Tôi biết rằng nếu ifort các macro được xác định here, nhưng tôi muốn có thể tạo ra danh sách này bản thân mình, kể từ khi macro chính xác được sử dụng và giá trị của họ sẽ phụ thuộc vào các tùy chọn trình biên dịch được sử dụng. Tôi cũng biết về dự án predef.

Trả lời

3

Với trình biên dịch Fortran Intel, ifort, sau đây có thể được sử dụng:

ifort -E -fpp /dev/null -dryrun 2>&1 | grep -e -D | cut -c 5- 

Dường hơn ifort không có một -dM cờ tương đương như icc, gfortran và gcc làm.

+0

Đánh dấu đây là câu trả lời được chấp nhận vì tôi thực sự chỉ quan tâm đến việc nhận các chỉ thị tiền xử lý được sử dụng với ifort (tổng quát hóa bao gồm trình biên dịch intel C chỉ để hy vọng làm cho câu hỏi thường hữu ích hơn). – Chris

+1

'ifort' luôn luôn là một trong những trickier - vì vậy cảm ơn bạn đã bao gồm nó! – patrickvacek

10

Sử dụng điều này với các trình biên dịch Intel:

icc -E -dM - < /dev/null 

Lưu ý rằng với gcc, tùy chọn -E cũng là cần thiết nếu bạn muốn sử dụng tùy chọn -dM tiền xử lý.

+0

Cảm ơn ghi chú về cách sử dụng tùy chọn '-E' với' gcc' - Tôi đã chỉnh sửa câu hỏi của mình để bao gồm cờ này. Bất kỳ ý tưởng về làm tương tự với ifort? – Chris

1

Đối với gfortran, hãy cẩn thận rằng gfortran -E -dM - < /dev/null cho kết quả tương tự như khi bạn gọi là gcc, điều này có thể không hữu ích. Bạn có thể muốn một cái gì đó như thế này (source):

gfortran -cpp -E -dM empty.f

Điều đó sẽ cung cấp cho bạn một danh sách nhỏ về những gì thực sự gfortran predefines. Bạn sẽ lưu ý rằng các kết quả rất có thể không bao gồm bất kỳ điều gì hữu ích để xác định hệ điều hành. Nói chung, đối với Fortran, bạn còn lại để tự định nghĩa chúng. Xem here để biết thêm chi tiết. Bạn cũng có thể thử một cái gì đó như this, nhưng tôi là một chút hoài nghi về thực tế của giải pháp đó. Ngoài ra, liên kết đó ngụ ý rằng tại một thời điểm, gfortran được xác định nhiều hơn hiện tại.

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