5

Điều tôi đang cố gắng thực hiện là thiết lập dự án trong đó không quan trọng nếu tiêu đề được biên dịch sẵn được đặt hay không. stdafx.hpp là P.H.Thiết lập dự án có thể biên dịch cả có và không có tiêu đề được biên dịch trước

Vấn đề chính của tôi là tôi có tệp trên thư mục máy chủ, không chỉ thư mục gốc của dự án. Gì có Tôi tryed:

  1. Nếu tôi

    #include "stdafx.hpp" 
    

    ở khắp mọi nơi hoạt động tốt với PH bộ trên, nhưng nó sẽ phàn nàn nếu tôi tắt nó, bởi vì các tập tin trong các thư mục con coudn't tìm thấy nó.

  2. Nếu tôi

    #include "../stdafx.hpp" 
    

    trong các tập tin mà đang subdirs, nó hoạt động tốt mà không có PH, nhưng với PH, trình biên dịch phàn nàn về stdafx.hpp không được bao gồm.

  3. Nếu tôi đặt lực bao gồm tệp thành stdafx.hpp, với đường dẫn tương đối hoặc tuyệt đối, trình biên dịch đã cho tôi lỗi (không thể nhớ ngay bây giờ, nếu cần thiết tôi sẽ tái tạo).

Vì vậy, giải pháp có thể là gì?

Trả lời

6

Giải pháp kinh điển rất dễ: Không bao gồm tệp tiêu đề được biên dịch trước (stdafx.h theo mặc định). Nếu mã của bạn cần phải biên dịch với tiêu đề biên dịch sẵn, sử dụng công tắc /FI (Name Forced Include File) biên dịch:

Tùy chọn này có tác dụng tương tự như cách xác định các tập tin với dấu ngoặc kép trong một chỉ thị #include trên dòng đầu tiên của tất cả các tập tin nguồn quy định trên dòng lệnh, trong biến môi trường CL, hoặc trong một tệp lệnh.

Điều này cho phép bạn sử dụng các tệp tiêu đề được biên dịch trước mà không cần sửa đổi mã nguồn của bạn.

Các quy tắc sử dụng một chỉ thị #include cùng với dấu ngoặc kép được trình bày dưới #include Directive (C/C++):

dạng trích dẫn:

Các tìm kiếm Preprocessor cho bao gồm các file theo thứ tự này:

  1. Trong cùng thư mục với tệp chứa câu lệnh #include.
  2. Trong các thư mục của các tệp hiện đang mở, theo thứ tự ngược lại mà chúng được mở. Việc tìm kiếm bắt đầu trong thư mục của phụ huynh bao gồm các tập tin và tiếp tục trở lên thông qua các thư mục của bất kỳ ông bà bao gồm các tập tin.
  3. Dọc theo đường dẫn được chỉ định bởi từng tùy chọn trình biên dịch/tôi.
  4. Dọc theo các đường dẫn được chỉ định bởi biến môi trường INCLUDE.

Sử dụng công tắc /I (Additional Include Directories) trình biên dịch để bao gồm các thư mục của tập tin tiêu đề sử dụng để tạo ra các tiêu đề precompiled sau đó sẽ đơn giản cho phép bạn viết

/FIstdafx.hpp 

Không có sự kết hợp của các thiết lập/topo dự án điều đó sẽ cho phép bạn chỉ cần bật hoặc tắt các tiêu đề được biên dịch trước. Các thiết bị chuyển mạch biên dịch /Y,/FI và/I phải được sử dụng cùng nhau hoặc xóa hoàn toàn. Để thay đổi một bộ cấu hình dưới dạng một đơn vị, bạn có thể sử dụng các trang thuộc tính (xem Working with Project Properties để biết chi tiết).

1

Một giải pháp dễ dàng là thiết lập đường dẫn bao gồm dự án của bạn để một đồng bằng #include "stdafx.hpp" luôn tìm tiêu đề, bất kể thư mục của tệp bao gồm.

Nếu bạn lo lắng về việc vô ý tạo tệp tiêu đề trong các thư mục khác hiển thị, bạn thậm chí có thể đặt tiêu đề có khả năng được biên dịch sẵn trong thư mục đặc biệt của nó.

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