Tôi có chương trình dựa trên Visual Studio C++ sử dụng các tiêu đề được biên dịch trước (stdafx.h
). Bây giờ chúng tôi đang chuyển ứng dụng sang Linux bằng cách sử dụng gcc 4.x.Xử lý stdafx.h trong mã đa nền
Câu hỏi là cách xử lý tiêu đề được biên dịch trước trong cả hai môi trường. Tôi đã googled nhưng không thể đi đến kết luận.
Rõ ràng là tôi muốn rời khỏi stdafx.h
trong Visual Studio vì cơ sở mã là các tiêu đề khá lớn và được biên dịch trước giúp tăng thời gian biên dịch.
Nhưng câu hỏi là phải làm gì trong Linux. Đây là những gì tôi tìm thấy:
- Để nguyên
stdafx.h
. gcc biên dịch mã nhanh hơn đáng kể so với VC++ (hoặc nó chỉ là máy Linux của tôi mạnh hơn ... :)), vì vậy tôi có thể hài lòng với tùy chọn này. Sử dụng cách tiếp cận từ here - làm
stdafx.h
cái nhìn tương tự (thiếtUSE_PRECOMPILED_HEADER
chỉ VS):#ifdef USE_PRECOMPILED_HEADER ... my stuff #endif
Sử dụng cách tiếp cận từ here - biên dịch VC++ với
/FI
để ngầm bao gồmstdafx.h
trong mỗi tập tin cpp. Vì vậy trong VS mã của bạn có thể được chuyển dễ dàng để được biên dịch mà không có tiêu đề được biên dịch trước và không có mã nào sẽ phải được thay đổi.
Cá nhân tôi không thích phụ thuộc và sự lộn xộnstdafx.h
đang đẩy một cơ sở mã lớn hướng tới. Do đó, tùy chọn này hấp dẫn với tôi - trên Linux, bạn không cóstdafx.h
, trong khi vẫn có thể bật tiêu đề được biên dịch trước trên VS chỉ/FI
.- Trên Linux biên dịch
stdafx.h
chỉ như là một tiêu đề biên dịch sẵn (bắt chước Visual Studio)
Ý kiến của bạn? Có cách tiếp cận nào khác để xử lý vấn đề này không?
xóa stdafx.h khỏi đâu? – dimba
Tôi có nghĩa là chỉ sau khi bạn chạy g ++ -c stdafx.h -o stdafx.h.gch, bạn có thể loại bỏ stdafx.h và biên dịch của bạn sẽ vẫn hoạt động (g ++ a.cpp). Bạn sẽ không thực sự làm điều này, nhưng tôi đã đề cập nó như là bằng chứng cho thấy nó đang sử dụng tiêu đề biên dịch sẵn. –
@Brian Có lẽ tôi sai nhưng có vẻ như tùy chọn 4 Tôi đã liệt kê :) Tôi đã cố xoá stdafx.h khỏi a.cpp và nó không được biên dịch - tiêu đề biên dịch trước sẽ chỉ được tìm kiếm nếu tệp tiêu đề tương ứng được bao gồm. Tôi xác nhận nó với strace :)). – dimba