2013-01-06 31 views
6

Trong dự án Qt 4, tôi xây dựng trình cài đặt Windows bằng cách sử dụng Cài đặt Inno. Các thư viện cần thiết (qsqlite.dll, qjpeg4.dll, vv) được bao gồm trong kịch bản với các biến CMake như QT_QSQLITE_PLUGIN_RELEASE hoặc QT_QJPEG_PLUGIN_RELEASE.Nhận đường dẫn của Qt 5 bổ sung

ví dụ: setup.iss.in:

[Files] 
Source: "myapp.exe"; DestDir: {app} 
Source: "${QT_QSQLITE_PLUGIN_RELEASE}"; DestDir: {app}/sqldrivers 
Source: "${QT_QJPEG_PLUGIN_RELEASE}"; DestDir: {app}/imageformats 

Bây giờ dự án cần chuyển sang Qt5. Tất cả mọi thứ hoạt động tốt, nhưng tôi không thể tìm thấy các biến được xác định trước để có được tương đương Qt5 cho các đường dẫn plugin này. Tất nhiên, tôi có thể mã hóa chúng, nhưng tôi đang tìm cách xác định nó một cách sạch sẽ và độc lập.

+0

Không chắc chắn về một câu trả lời, nhưng bạn có thể kiểm tra tất cả các biến sử dụng kỹ thuật mô tả trong [này Trả lời] (http://stackoverflow.com/a/9328525/424459) – Fraser

+0

Vâng, tôi đã sử dụng chính xác macro này để tìm các biến được đề cập bên dưới với Qt4. Nhưng sử dụng như vậy, tôi không thể tìm thấy tương đương Qt5. Tất cả các công cụ cmake đã được viết lại cho phiên bản mới của khung và một số thông tin được lưu trữ dưới dạng thuộc tính đích. Nhưng tôi đã không tìm thấy bất kỳ cách nào để gỡ lỗi các thuộc tính trên các mục tiêu Qt5. – Antwane

Trả lời

11

Qt5 không còn dựa vào tệp mô-đun CMake để tìm cài đặt Qt5, nhưng cung cấp tệp cấu hình CMake của riêng nó, thiết lập thư viện Qt5 làm mục tiêu CMake đã nhập. Để có được con đường thực tế để các Qt tập tin thư viện module, truy vấn LOCATION tài sản của CMake mục tiêu của mô-đun hoặc cấu hình cụ thể phiên bản biến thể LOCATION_<Config> của nó, ví dụ:

find_package(Qt5Core) 
get_target_property(QtCore_location_Release Qt5::Core LOCATION_Release) 

find_package(Qt5Widgets) 
get_target_property(QtWidgets_location_Release Qt5::Widgets LOCATION_Release) 

Chiến lược này có lẽ cũng áp dụng đối với các plugin Qt, miễn là bạn biết tên mục tiêu CMake của plugin (Tôi chưa xác minh điều đó).

Xem thêm Qt5 CMake manual.

+0

Bạn đã đúng, nhưng tôi không tìm thấy thuộc tính mục tiêu phù hợp được đặt trong các tệp Qt5XXXConfig [Version] .cmake và tôi không tìm thấy macro làm cùng một mẹo như [this one] (http: // stackoverflow. com/a/9328525/424459) nhưng đối với tài sản. – Antwane

+0

Liên kết bị hỏng đến Qt5 CMake Manual – Joakim

+0

@Joakim link fixed – sakra

0

Xây dựng về câu trả lời steveire, đây là làm thế nào bạn sẽ nhận được các đường dẫn tuyệt đối đến QSqlite và QJpeg plugins:

find_package(Qt5Gui) 
find_package(Qt5Sql) 

get_target_property(qsqlite_loc Qt5::QSQLiteDriverPlugin LOCATION_Release) 
message("QSqlite DLL: ${qsqlite_loc}") 

get_target_property(qjpeg_loc Qt5::QJpegPlugin LOCATION_Release) 
message("QJpeg DLL: ${qjpeg_loc}") 
+0

Câu trả lời của bạn không chính xác. Đọc LOCATION không LOCATION_Release. – steveire

+0

Tôi đã bắt đầu với LOCATION nhưng đã thay đổi nó vì câu hỏi ban đầu chỉ tìm kiếm các plugin phát hành. Bạn chắc chắn có thể chỉ để cho CMake xử lý cấu hình. – axelstudios

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