2009-06-30 32 views
6

Như tôi đã nói trong một câu hỏi trước, tôi đang lên kế hoạch chuyển một dự án Qt từ VC++ sang QtCreator.Dự án QtCreator với nhiều libs và một exe

Dự án bao gồm 4 tiểu dự án: 3 trong số đó là libs và bản cuối cùng là exe. Các tiểu dự án được xếp lớp, có nghĩa là mỗi lớp có phụ thuộc thời gian biên dịch và liên kết với các lớp bên dưới nó.

Các tập tin được tổ chức như sau:

root 
    lib1 
    lib2 
    lib3 
    main 

Tôi đã tạo ra mỗi tiểu dự án trong QtCreator từ đầu. Mỗi thư mục chứa một tệp chuyên nghiệp có cùng tên (ví dụ: lib1 -> lib1.pro). Sử dụng cách tiếp cận này tôi đã xây dựng tất cả các dự án ngoại trừ dự án cuối cùng phải liên kết tệp thực thi. Tôi đã nhận được mối liên kết lỗi mà tôi cố định bằng cách thủ công chỉnh sửa các tập tin chuyên nghiệp và bổ sung vào mã bên dưới:

LIBS += ../path/lib1.a \ 
    ../path/lib2.a \ 
    ../path/lib3.a 

Tất cả là tốt, ngoại trừ bây giờ lib3 phàn nàn rằng nó không thể tìm thấy những biểu tượng từ lib2 và lib1. Addind LIBS vào tệp lib2.pro không hoạt động.

Tôi có cảm giác rằng tôi không nhận được cách QtCreator hoạt động với libs và thực thi. Làm thế nào bạn sẽ tổ chức một dự án như vậy để nó biên dịch và liên kết chính xác?

Trả lời

4

Sau khi khắc phục sự cố này, tôi nhớ rằng đối với chuỗi công cụ GCC, thứ tự của tham số liên kết là quan trọng.

Đảo ngược các mục nhập LIBS đã thực hiện thủ thuật.

3

Rất vui khi thấy bạn tìm thấy câu trả lời. Bạn cũng có thể muốn thêm:

CONFIG += ordered 

vào thư mục gốc .pro (tệp này chỉ hợp lệ trong tiểu sử 'SUBDIRS'). Nó buộc qmake tạo ra Makefiles để bảo vệ thứ tự mà bạn liệt kê chúng trong mọi trường hợp.

+0

Có, tôi đã tìm thấy tùy chọn này trong tài liệu và tôi đang sử dụng tài liệu đó vào lúc này. Phần tốt là tôi có thể tải toàn bộ dự án của tôi cùng một lúc, phần xấu là tôi không thể xây dựng từng lib riêng lẻ. :-) – rpg

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