Tôi có một dự án với một số thư mục có chứa tệp nguồn có cùng tên.Qmake: Tránh xung đột tên tệp trong các thư mục khác nhau mà không cần giới thiệu thư viện
cây nguồn của tôi trông như thế này:
project.pro
foo/
conflict.h
conflict.cpp
bar/
conflict.h
conflict.cpp
some.h
other.h
files.h
main.cpp
mỗi mặc định, qmake tạo ra một Makefile mà sẽ tạo ra một cây xây dựng như thế này:
conflict.o
main.o
target
đâu conflict.o
là đối tượng tập tin kết quả cho cả hai foo/conflict.cpp
và foo/conflict.h
.
Tôi không thể đổi tên vì chúng được tạo bằng công cụ bên ngoài và buộc tên tệp khác nhau ngụ ý thay đổi nội dung của chúng, vì vậy đây không phải là tùy chọn.
Tôi cũng không muốn sử dụng qmake SUBDIRS
mẫu vì điều này sẽ có nghĩa là (1) mỗi subdir được xây dựng riêng biệt như một thư viện và do đó rất nhiều phức tạp quá trình xây dựng tổng thể (trong mắt tôi ít nhất) và (2) trong thư mục cấp cao nhất tôi không thể có bất kỳ tệp nguồn nào. Hoặc là tôi sai?
Tôi không thể nói qmake để ghi các tệp đối tượng vào các thư mục riêng biệt trong thư mục xây dựng? Vì vậy, cây xây dựng của tôi sẽ trông giống như sau:
foo/
conflict.o
bar/
conflict.o
main.o
target
Hoặc có giải pháp nào khác không yêu cầu đổi tên tệp nguồn hay giới thiệu điều gì đó phức tạp như thư viện tĩnh không? Tôi không thể tin rằng Qt đã không giải quyết vấn đề này (trong mắt tôi đơn giản) trong nhiều năm. (Tôi đã gặp vấn đề này cách đây 4 năm nhưng có thể đổi tên các tệp trong dự án đó, trong khi ở đây tôi không thể.)
Nếu điều quan trọng: tôi sử dụng Qt 4.8 trên cả Ubuntu với G ++ và Windows với mingw32.
Không thể thực hiện được. –
@NikosC. Tôi có thể có một tập tin chuyên nghiệp cho các tập tin cấp cao nhất mà sẽ liên kết với các thư viện khác + một tập tin chuyên nghiệp SUBDIRS cấp cao nhất mà sẽ có subdir '.'? Điều này sẽ yêu cầu tôi cũng ghi đè lên tập tin .pro cho subdir này để được một cái gì đó khác với tập tin .pro cấp cao nhất cho toàn bộ ứng dụng. Tôi hi vọng bạn hiểu những gì tôi nói. Tôi chỉ muốn tránh rằng tôi phải di chuyển tất cả các tập tin cấp cao nhất vào một thư mục con vật lý. – leemes
Bạn có thể chỉ sử dụng một tệp dự án bổ sung cho 'foo' và giữ cho tệp hiện tại của bạn cho thư mục cấp cao nhất và' bar'. Một tùy chọn khác là symlink tên tệp xung đột: 'ln -s bar/conflict.cpp bar/conflict_bar.cpp' và sau đó sử dụng liên kết tượng trưng trong tệp dự án. –