2009-10-05 26 views
5

Tôi muốn có các Phụ thuộc dự án khác nhau tùy thuộc vào Cấu hình dự án mà tôi hiện đang xây dựng.Làm thế nào để có phụ thuộc dự án khác nhau cho mỗi cấu hình dự án?

Ví dụ, tôi không muốn xây dựng và liên kết SomeTestLib.vcproj trong cấu hình phát hành, nhưng tôi muốn xây dựng và liên kết với nó trong Debug.

Một giải pháp, mà sorta hoạt động, là sử dụng macro biên soạn có điều kiện:

#ifdef DEBUG 
#pragma comment(lib, "SomeTestLib") 
#endif 

Nhưng trong trường hợp này, gỡ rối và IntelliSense không làm việc cho SomeTestLib.
Có một .sln hoặc .vcproj hack mà tôi có thể sử dụng không?
Cảm ơn.

Trả lời

6

Sau khi tìm kiếm Google trong nhiều ngày, cuối cùng tôi đã tìm ra giải pháp cho vấn đề này và thổi một nhà phát triển VS, người đã giải quyết vấn đề này (thực ra, tôi đã thử một vài thứ khác nhau để tìm). Rõ ràng, IDE không đủ thông minh để tìm ra rằng bạn đã vô hiệu hóa việc xây dựng cho một thư viện cụ thể theo một cấu hình nhất định và không thêm đầu ra của dự án đó vào dòng lệnh của trình liên kết cho các dự án phụ thuộc vào nó. Tôi chắc chắn rằng bạn nhận thức được điều này.

Tuy nhiên, vì nó chỉ dán dòng đầu ra từ dự án thư viện vào dòng lệnh của dự án phụ thuộc, thiết lập dòng đầu ra thành "" sẽ dẫn đến NOTHING được thêm vào dòng lệnh liên kết trên các dự án phụ thuộc!

Hy vọng rằng, sự cố này sẽ được khắc phục trong Visual Studio trong tương lai. Tôi vẫn lạc quan, bởi vì nó là IDE yêu thích của tôi, và tôi luôn ấn tượng bởi các tính năng mà nó hỗ trợ. Tuy nhiên, một số chủ đề trợ giúp VS mà tôi đã thấy nói rằng lỗi này là "do thiết kế", vì vậy có thể họ sẽ không khắc phục được. Dường như nó có vẻ dễ dàng để làm.

Anyways, để tóm tắt:

  • Right-Click vào dự án thư viện của bạn trong Solution Explorer và nhấp "Properties".
  • Chuyển sang cặp "Cấu hình/Nền tảng" mà dự án thư viện của bạn không xây dựng cho.
  • Chọn "Thuộc tính cấu hình -> Thư viện -> Chung".
  • Đối với "Tệp đầu ra", nhập "" (đó là dấu ngoặc mở, không gian, dấu đóng).
  • Nhấp vào OK.

Xin lưu ý rằng cách giải quyết này sẽ cung cấp cho bạn các lỗi nếu bạn xây dựng hoặc xóa dự án thư viện bị vô hiệu hóa. Nếu bạn chỉ xây dựng giải pháp của mình, giải pháp sẽ bị bỏ qua trên cấu hình bị tắt, vì vậy bạn sẽ không gặp lỗi.

Hy vọng điều này sẽ hữu ích!

Daniel

+0

Cảm ơn, điều này thật tuyệt! Một điều nữa: Nếu sự phụ thuộc mà bạn đang liên kết xảy ra là một .dll, bạn cũng có thể đặt tên của Thư viện nhập thành "" và nó sẽ bị bỏ qua. Tùy chọn này nằm trong Linker-> Advanced-> Import Library. – k0dek0mmand0

0

Trong studio trực quan, mỗi cấu hình xây dựng giữ danh sách thuộc tính riêng cho dự án của bạn. Chỉ cần thêm lib của bạn vào bất kỳ cấu hình xây dựng nào bạn muốn. Chỉ cần không thêm vào "Tất cả cấu hình"

+0

Tôi thực sự hỏi về một dự án là một phần của giải pháp chứ không phải là một thư viện bên ngoài. Tôi biết tùy chọn bạn đang đề xuất. Những gì tôi muốn đạt được là đánh dấu một phụ thuộc dự án không hoạt động trong các cấu hình giải pháp nhất định. – k0dek0mmand0

0

Nhấp chuột phải vào giải pháp của bạn và chọn thuộc tính. trang bất động sản giải pháp sẽ hiển thị ..

Trong trang chuột phải chọn Configuration Properties >>> Cấu hình

đây bạn có thể lựa chọn cấu hình build cho Debug, Release và Tất cả build kiểu bằng cách kiểm tra hộp kiểm có nhãn như xây dựng.

+0

Nếu tôi hiểu chính xác, việc bỏ chọn một dự án ở đây sẽ ngăn không cho nó được xây dựng. Nhưng nếu dự án không được đánh dấu này được đánh dấu là Phụ thuộc dự án, trình liên kết sẽ khiếu nại (SomeTestLib.lib không thể tìm thấy.) – k0dek0mmand0

+0

Không nếu nó đã được xây dựng và hội đồng có mặt trong cùng một thư mục. Kể từ khi bạn xây dựng một dự án tất cả các phụ thuộc của nó khác thì những người được cài đặt trong GAC được sao chép vào thư mục riêng của hội đồng đó. Tuy nhiên, vì nó phụ thuộc vào việc lắp ráp khác và một sự thay đổi được thực hiện trong nguồn của hội đồng đó, nó sẽ xây dựng tất cả các phụ thuộc đầu tiên. –

+0

OK, nhưng tôi thậm chí không muốn xây dựng SomeTestLib trong cấu hình Phát hành, đó là toàn bộ vấn đề. :) – k0dek0mmand0

2

Có thể tắt thuộc tính phụ thuộc thư viện Linker/General/Link trong dự án phụ thuộc và đặt thư viện vào đầu vào liên kết trong cấu hình có liên quan.

Điều này khiến tài liệu tham khảo của dự án ít hữu ích hơn nhưng có thể thực hiện được.

1

Đặt loại cấu hình để Utility thay vì ứng dụng/thư viện trong các thuộc tính dự án -> General ..

0

Trong dự án chính, đi đến Configuration Properties -> Linker -> Input, trong phần có tiêu đề "Bỏ qua thư viện cụ thể" thêm lib bạn muốn eignored, ví dụ: .lib. Làm điều này một lần nữa cho cấu hình khác, ngoại trừ bỏ qua một lib/dll khác.

Cuối cùng, nếu bạn không muốn mỗi dự án xây dựng cho cả hai cấu hình, hãy nhấp chuột phải vào Solution -> Project Dependencies -> [Select main/top-level project] -> Bỏ chọn dự án bạn không muốn xây dựng/làm ngơ.

Phương pháp này có lợi thế là bạn vẫn có thể xây dựng thủ công từng dự án nếu muốn, nhưng có thể chuyển đổi cấu hình và chỉ xây dựng/sử dụng lib/dll mà bạn muốn.

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