2015-07-01 13 views
5

Các Qt 5 CMake manual bang rằng qt5_use_modules vĩ mô bị phản đối:Điều gì sẽ sử dụng thay vì `qt5_use_modules`?

Macro này là lỗi thời. Sử dụng target_link_libraries với mục tiêu IMPORTED để thay thế.

... Nhưng qt5_use_modules không chỉ đơn giản là chỉ định thư viện liên kết: nó chỉ định thư mục, cờ biên dịch cần thiết và hơn thế nữa (xem mô tả đầy đủ trong tài liệu được liên kết ở trên).

Giả sử, sau đó, rằng biến QTMODULES chứa một số danh sách các module Qt nên được sử dụng cho một dự án, các "đề nghị" cách để thay thế sau "phản đối" đường CMake là gì?

qt5_use_modules(${myProjectName} ${QTMODULES}) 

Sau đây KHÔNG làm việc, chủ yếu là bởi vì nó không thêm bất kỳ Qt bao gồm đường dẫn:

target_link_libraries(${myProjectName} IMPORTED ${QTMODULES}) 

Liệu các QTMODULES biến cần phải được tự lặp kết thúc, do đó include_directories có thể được gọi cho mỗi tên mô-đun riêng lẻ? Điều này có vẻ giống như một bước lùi lớn từ qt5_use_modules, đơn giản và "chỉ hoạt động". Tui bỏ lỡ điều gì vậy?

Trả lời

6

Thông báo về việc sử dụng các mục tiêu IMPORTED thực sự đề cập đến các mục tiêu đã tạo mà các mô-đun CMake của Qt5 cung cấp cho bạn, không phải bạn phải đặt thuộc tính IMPORTED trên macro target_link_libraries. Ví dụ, một cái gì đó như:

target_link_libraries(${myProjectName} Qt5::Core Qt5::Widgets) 

sẽ chăm sóc thêm tất cả các cần thiết bao gồm đường dẫn, đường dẫn liên kết, và các thư viện để sử dụng Qt5CoreQt5Widgets mô-đun.

+0

Điều đó dường như vẫn yêu cầu tách từng tên ra khỏi biến chứa danh sách các mô-đun mà tôi muốn sử dụng và gắn 'Qt5 ::' vào mỗi biến. Có lý do cụ thể nào tại sao điều này là thích hợp hơn khi chỉ sử dụng 'qt5_use_modules'? –

+0

Đó là * thú vị, tuy nhiên, bạn có thể nhận 'target_link_libraries' để thêm đường dẫn bao gồm, v.v. –

+0

Tùy thuộc vào định dạng của danh sách, bạn có thể thực hiện một số regex trên danh sách đó hoặc lặp qua danh sách để xây dựng một biến mới ở định dạng phù hợp ... – Zrax

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