2010-02-24 39 views
11

Tôi có một số qmake xây dựng một vài thư viện và một ứng dụng phụ thuộc vào chúng. Sử dụng mẫu subdirs Tôi có thể lấy qmake để xuất ra một tệp .sln hoạt động gần như theo ý thích của tôi trong VC2008. Mặc dù tôi đã chỉ định các phụ thuộc giữa các mục tiêu theo mọi cách tôi đã thấy được mô tả, nhưng cuối cùng tôi không có "các phụ thuộc dự án" trong tệp .sln và tôi phải thêm chúng theo cách thủ công.Cách lấy qmake để tạo "phụ thuộc dự án" trong dự án Visual Studio .sln

Cho đến nay tôi đã cố gắng

CONFIG += ordered 

với đúng trật tự vô ích.

Và tương tự như cú pháp phức tạp hơn:

client.depends = core common 

nào cũng không hoạt động. Không có sự phụ thuộc nào xảy ra khi tôi tải sln.

Trả lời

1

Tôi không phải là wiz trong makefiles nhưng nếu tôi là bạn, tôi sẽ cố gắng tạo lại sự phụ thuộc đó với QtCreator bằng cách chỉnh sửa tệp .pro, chạy qmake rồi xem kết quả được tạo tự động trong MAKLEFILE. Nếu bạn muốn biết qmake hoạt động như thế nào thì hãy xem tài liệu qt.

+0

Tôi đã qua tất cả các bộ tài liệu tôi có thể tìm thấy. Và thực hiện rất nhiều nguồn lặn để khởi động. Như một lưu ý phụ, các makefiles qmake tạo ra dường như có các phụ thuộc chính xác. Đó là .sln có vấn đề. –

+0

@Michael: bạn có nghĩa là các tệp .vcproj riêng lẻ (vì tôi tin rằng đó là nơi những người phụ thuộc đó sống). –

+0

Tôi có thể đoán công cụ này đã tồn tại trong tệp .sln, vì đó là tệp biết về tất cả các dự án khác nhau và có thể kết nối chúng với các phụ thuộc mà tôi cần. –

2

Từ một mục danh sách gửi thư cũ: http://lists.trolltech.com/qt-interest/2006-07/thread00238-0.html

Dường như nó cố gắng để tìm ra những thứ phụ thuộc cho bạn. Bạn có thể xây dựng từ sln mà không cần nhập các phụ thuộc dự án theo cách thủ công không?

+0

Tôi đã xem qua bài đăng bí ẩn đó trước đây. Không chắc chắn nếu thông tin là hiện tại. Tôi chắc chắn đã thử sử dụng cả hai phương pháp đơn giản và phức tạp mà nó mô tả, nhưng vô ích. Không nhập phụ thuộc theo cách thủ công, tôi không thể nói rằng bản dựng thực sự hoạt động, không. Nó không hoàn toàn bị phá vỡ, nhưng có đủ vấn đề, cả hai đều công khai và im lặng, rằng nó luôn luôn có giá trị nó để thêm các deps bằng tay. –

+0

Bạn đã cố gắng thiết lập các phụ thuộc với QtCreator và sau đó tạo sln? Tôi không có máy tính Qt dev ở trước mặt mình, vì vậy tôi không thể nói chắc chắn nó sẽ đưa vào tệp chuyên nghiệp khi bạn chỉ định các phụ thuộc trong khung nhìn dự án. –

8

Cả hai CONFIG += orderedtarget.depends = không được hỗ trợ bởi chương trình phụ trợ MSVC của qmake (trình tạo giải pháp). Trở lại năm 2010 với Qt 4.7 xung quanh, các tài liệu không đề cập đến điều đó, nhưng trong Qt 4.8 các nhà phát triển đã cập nhật các tài liệu accordingly (xem những nhận xét phần Target):

  • .depends tiểu dự án này phụ thuộc vào quy định tiểu dự án. Chỉ khả dụng trên nền tảng sử dụng makefiles.
  • Các ra lệnh tùy chọn không được hỗ trợ cho Visual Studio.

Nhưng họ đã cung cấp giải pháp thay thế (được thảo luận trong đó cryptic post) và nó vẫn hợp lệ và thậm chí được ghi lại trong cùng một phần target. Thật tệ, tôi đã phải xây dựng lại qmake và sử dụng một trình gỡ lỗi để xác minh rằng:

  1. a) Có một dự án Lib/DLL trong đó TARGET (các lib được sử dụng và không phải là .dll) được sử dụng trên dòng liên kết của một dự án khác trong giải pháp của bạn (bạn có thể sửa đổi đường liên kết bằng LIBS).

    b) Có dự án Exe trong đó TARGET được sử dụng trong bước xây dựng tùy chỉnh của một dự án khác trong giải pháp của bạn.

  2. Bạn không sử dụng đường dẫn trong biến TARGET (sử dụng DESTDIR/DLLDESTDIR cho điều đó), ví dụ: TARGET = $ (SOME_VARIABLE)/myLib, sẽ không hoạt động.
  3. Nếu bạn có vị trí đặc biệt cho libs của mình, bạn chỉ định đường dẫn -Lmy/library/path và LIBS + = mylib, thay vì chỉ sử dụng LIBS + = my/library/path/mylib
  4. Các dự án lá được tạo trước khi bạn tạo tệp giải pháp. (Bạn có thể sử dụng lá cờ đệ quy cho qmake để làm điều này, như "qmake -tp vc -r [yourproject.pro]"

Về cơ bản, qmake sẽ tạo ra sự phụ thuộc khi tên mục tiêu của lib của bạn (yourlib.lib) là tương đương với một trong những thư viện nhập khẩu của các ứng dụng chính thức (có LIBS += yourlib.lib). (Xem qmake's source nơi thư viện import được thêm vào như phụ thuộc, và một little further nơi họ đang so với những cái tên mục tiêu dự án)

đây là thiết lập tối thiểu tạo phụ thuộc trong giải pháp:

solution.pro 
    TEMPLATE = vcsubdirs 
    SUBDIRS = main app 

app/app.pro 
    LIBS += main.lib 

main/main.pro 
    TARGET = main 
    TEMPLATE = vclib 

Với những, nếu bạn chạy qmake -r -tp vc, bạn sẽ nhận được sự phụ thuộc rõ ràng trong sln tạo:

GlobalSection(ProjectDependencies) = postSolution 
    {E634D0EB-B004-3246-AADA-E383A376158F}.0 = {1BD6E999-63E6-36F5-99EE-1A650332198C} 
EndGlobalSection 
+0

Cảm ơn bạn rất nhiều! Cuối cùng tôi biết lý do tại sao các phụ thuộc heck không hoạt động. – Trass3r

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