2014-07-03 28 views
8

Tôi có một dự án QT chạy trên Linux x86 và Linux được nhúng (yocto). Đối với mỗi nền tảng tôi đã xác định một Kit trong QtCreator tham khảo trình biên dịch thích hợp, vvTệp dự án Qt: Thêm libs tùy thuộc vào Kit

Bây giờ tôi muốn thêm libs để tập tin chuyên nghiệp của tôi, nhưng tôi đã nhận thư viện khác nhau trên mỗi nền tảng. Tôi đã không tìm thấy một cách để chỉ định LIBS-chỉ thị phụ thuộc vào bộ biên dịch.

tôi tìm kiếm một cái gì đó như:

if (Kit == "Desktop") 
    LIBS += ... 

if (Kit == "Embedded Yocto") 
    LIBS += ... 

Làm thế nào để đạt được điều này? Cảm ơn bạn trước

+1

Có một câu trả lời thú vị khác tại đây: http://stackoverflow.com/questions/24912778/qtcreator-kit-specific-precompiler-macro-definitions – vsz

Trả lời

3

tôi cóp nhặt được một giải pháp cho Vấn đề của OP bằng cách sử dụng câu trả lời được đề xuất bởi @vsz trong các nhận xét được tìm thấy here.

Tôi có hai bộ, một cho máy tính để bàn địa phương và một cho các thiết bị Target_ARM, và tôi muốn có một cách dễ dàng xây dựng cho cả hai những người không phải đặc biệt sửa đổi các .pro tập tin hoặc bất cứ điều gì khác. Tôi làm theo các câu trả lời liên quan và bổ sung như sau:

  • Trong bộ hồ sơ Desktop của tôi (cho cả Debug và Release), tôi đã thêm CONFIG+=Desktop như một qmake luận thêm trong bước qmake xây dựng.
  • Đối với bộ Target_ARM, tôi đã thêm CONFIG+=Target_ARM vào cùng một vị trí.

Bây giờ, đây là nơi mọi thứ chuyển từ câu trả lời được liên kết đến vấn đề của OP. Tôi không chỉ đơn giản muốn #define biến ed trong mã của mình, tôi muốn thay đổi hành vi của qmake dựa trên bộ đã chọn. Tôi không biết chức năng kiểm tra tích hợp CONFIG có hỗ trợ khối chỉ định hay không (ví dụ: CONFIG { _several lines here_ }), nhưng hóa ra tôi có thể sao chép và dán hàm kiểm tra CONFIG ở trước mỗi dòng mà tôi muốn có điều kiện; trên thực tế tôi có thể chuỗi nhiều CONFIG s với nhau, như thế này:

CONFIG(Desktop, Desktop|Target_ARM):unix:!macx:CONFIG(debug, debug|release): LIBS += /path/to/Desktop/debug/lib 
else:CONFIG(Desktop, Desktop|Target_ARM):unix:!macx:CONFIG(release, debug|release): LIBS += /path/to/Destop/release/lib 

Vì nó cho thấy, tuyên bố trên sẽ chạy qmake với LIBS con đường thích hợp tùy thuộc vào bộ và cấu hình tôi đã chọn. Desktop->debug sẽ tạo một Makefile với /path/to/Desktop/debug/lib trong đó trong khi Desktop->release sẽ tạo một Makefile với /path/to/Desktop/release/lib. Tôi có các câu lệnh tương tự cho bộ dụng cụ Target_ARM. Dưới đây là ví dụ về việc chọn đúng INCLUDEPATH: Cả hai thử nghiệm sẽ được đánh giá là đúng khi chọn Target_ARM->release.

CONFIG(Target_ARM, Desktop|Target_ARM):CONFIG(release, debug|release): INCLUDEPATH += /include/path/for/Target_ARM/release 

Trong tất cả, tôi đã sử dụng phương pháp này để sửa đổi LIBS, INCLUDEPATH, DEPENDPATH, and PRE_TARGETDEPS.Tôi có 4 cấu hình có thể bao gồm đường dẫn và thư viện tùy thuộc vào bộ tôi chọn (Desktop hoặc Target_ARM) và cấu hình nào tôi chọn (build hoặc release). Khi thiết lập này được thiết lập, bạn không cần chỉnh sửa tệp .pro, chỉ cần chọn bộ công cụ, cấu hình xây dựng của bạn, chạy qmake, sau đó tạo lại.

Tôi không biết trên đầu của tôi nơi dữ liệu CONFIG+=Desktop (ví dụ) được lưu trữ, nhưng tôi đoán trong tệp .pro.user. Vì vậy, nếu ai đó kéo tệp .pro của bạn từ một repo, họ có thể phải định cấu hình ban đầu dự án theo cách này ít nhất một lần, nhưng không phải sau đó (miễn là tệp .pro.user vẫn tồn tại). QT thực sự cần phải có một cơ chế dễ dàng để thực hiện điều này ở phía trước và trung tâm, đặc biệt là vì một trong những điểm bán hàng của họ là tích hợp nhiều nền tảng. Nếu có một cách tốt hơn để làm điều này, tôi đã không nhìn thấy nó trên SO hoặc trong các tài liệu QT được nêu ra.

1

Bạn có tất cả các biến qmake đây: qt-project.org/doc/qt-4.8/qmake-function-reference.html

Bạn có thể định nghĩa một biến

KIT = Desktop 
#KIT = EmbeddedYocto 

Và sử dụng chứa chức năng

contains(KIT, Desktop) { 
    LIBS += ... 
} 
contains(KIT, EmbeddedYocto) { 
    LIBS += ... 
} 
+1

Cảm ơn câu trả lời của bạn. Vì vậy, tôi sẽ thay đổi việc gán biến KIT khi tôi thay đổi nền tảng đích ... Thực ra tôi hy vọng tôi có thể truy vấn KIT được chọn hiện tại từ QtCreator từ các tùy chọn xây dựng. – mbue

0
MY_QT_INSTALL_PREFIX=$$[QT_INSTALL_PREFIX] 
equals(MY_QT_INSTALL_PREFIX,"C:/Qt/Qt5.3.1/5.3/msvc2010_opengl"){ 
message($$[QT_INSTALL_PREFIX]) 
} 
Các vấn đề liên quan