2013-09-06 66 views
6

Tôi muốn cung cấp các tùy chọn cho trình liên kết khi xây dựng thư viện tĩnh sử dụng qmake. Nói rằng tôi muốn có được đầu ra liên kết tiết khi xây dựng với MSVC. Tệp dự án trông như sau:Cách cung cấp tùy chọn trình liên kết khi liên kết thư viện tĩnh với qmake?

# mylib.pro 
TEMPLATE = lib 
TARGET = mylib 
CONFIG += staticlib 
QT += core 
win32-msvc*: QMAKE_LFLAGS += /VERBOSE 
unix: QMAKE_LFLAGS += -v 

Đó là toàn bộ tệp dự án. Nó sẽ dẫn đến một thư viện tĩnh rỗng không có đối tượng trong đó.

Đặt không QMAKE_LFLAGS cũng không QMAKE_LFLAGS_STATIC_LIB cũng không LIBS có bất kỳ ảnh hưởng nào lên trình liên kết. Không có gì được đặt trong các biến thậm chí làm cho nó vào Makefile. Nếu QMAKE_LFLAGS hoạt động, tôi hy vọng sẽ thấy /VERBOSE hoặc -v được chuyển đến trình liên kết trên dòng lệnh, khi thích hợp cho nền tảng nhất định.

Việc sử dụng trình tạo giả lập không quan trọng, hành vi này có vẻ nhất quán. Hai nền tảng quan tâm là.

qmake -spec win32-msvc2008 
qmake -spec macx-llvm 

Do tính chất đa nền tảng của qmake, bạn có thể kiểm tra nó trên bất kỳ nền tảng nào bạn đã cài đặt Qt. Điều này tái tạo trên qmake từ cả Qt 4.8.4 và 5.1.1. Phiên bản msvc được đưa ra trong mkspec không quan trọng.

Trả lời

4

Trong staticlib dự án, LFLAGS không được chuyển cho trình liên kết. Trong thực tế, không có cách nào được ghi chép để vượt qua những lá cờ như vậy.

Giải pháp phụ thuộc vào máy phát.

Đối với msvc_nmake, LIBFLAGS được chuyển đến trình liên kết thay thế. Để có được sản lượng tiết, bạn có thể thêm

QMAKE_LIBFLAGS += /VERBOSE 

để xác minh rằng nó hoạt động, trên hệ thống bất kỳ, bạn có thể gọi qmake -spec win32-msvc2008; phiên bản msvc cụ thể không quan trọng.

Đối với unixmake, AR được sử dụng để gọi trình liên kết, vì vậy bạn phải thêm cờ vào QMAKE_AR. Để có được kết xuất tiết, bạn có thể thêm

QMAKE_AR += -v 

Để xác minh, hãy gọi qmake -spec macx-llvm; bất kỳ spec unix nào khác cũng hoạt động tốt.

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