Gần đây tôi cũng đã xem xét vấn đề này. Chia dự án thành các tiểu dự án khiến mọi thứ trở nên phức tạp hơn nhiều, và ít nhất là trong nỗ lực đầu tiên của tôi không thành công. Sau đó, tôi đã thử CONFIG += object_with_source
và CONFIG += object_parallel_to_source
, nhưng cả hai dường như không hoạt động với phiên bản Qt của tôi.
Vì vậy, đây là cách tôi giải quyết nó (cho Visual Studio 2010, tôi không biết nếu công trình tương tự với các phiên bản khác):
Nếu dự án là một dự án Visual Studio bình thường, không phải là một tạo ra bởi qmake , bạn có thể giải quyết nó như được mô tả ở đây: Visual Studio 2010 & 2008 can't handle source files with identical names in different folders? (thay đổi thư mục đầu ra của tệp đối tượng thành một thư mục tương đối bằng cách thêm %(RelativeDir)
trong cài đặt dự án "C/C++"> "Tệp đầu ra"> "Tên tệp đối tượng").
Rõ ràng, bạn không muốn làm điều này bằng tay mỗi khi bạn tạo một dự án Visual Studio mới với QMake, vậy tại sao không tự động hóa nó? Sau khi tất cả các tệp dự án Visual Studio là các tệp XML thông thường. Nhìn vào sự khác biệt trước và sau khi thiết lập các tùy chọn cho thấy nó được lưu trong một thẻ duy nhất gọi là ObjectFileName
.
Vì vậy, tôi đã viết kịch bản Python này:
import sys
filename = sys.argv[1]
f = open(filename, "r", -1, "utf-8-sig")
lines = f.readlines()
f.close()
f = open(filename, "w", -1, "utf-8-sig")
for line in lines:
line = line.replace("</ObjectFileName>", "%(RelativeDir)\</ObjectFileName>")
f.write(line)
f.close()
..và sử dụng nó như thế này trong bat-file của tôi mà tôi luôn gọi để tạo ra các dự án Visual Studio:
qmake -tp vc myproject.pro
@cd ../scripts
unflatten_vcproj_obj_output.py "../src/myproject.vcxproj"
@pause
Không phải là một giải pháp đẹp, nhưng nó hoạt động.
Lưu ý: Tính năng này đã bị xóa, http://qt.gitorious.org/qt/qtbase/commit/a72420d012fd09f0a79ae75b77eb1c3bbff75669/diffs –
Địa chỉ mới cho cam kết xóa: http://code.qt.io/cgit/ qt/qtbase.git/commit /? id = a72420d012fd09f0a79ae75b77eb1c3bbff75669 – SGaist