Như đã trình bày trong Undocumented qmake, tôi tuyên bố một trình biên dịch thêm trong tập tin dự án qmake tôi:qmake thêm biên dịch với nhiều kết quả đầu ra cho mỗi tập tin
TEST = somefile.h
test_c.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.cpp
test_c.input = TEST
test_c.commands = C:/somedir/some.exe /i ${QMAKE_FILE_IN} /o ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.cpp
test_c.variable_out = SOURCES
test_c.name = MyTestC
QMAKE_EXTRA_COMPILERS += test_c
Và điều này hoạt động tốt. Nhưng tôi cũng muốn tạo một tệp tiêu đề. Tôi có thể dễ dàng tạo một công cụ tùy chỉnh thứ hai để phân tích tệp này (hoặc các tệp, nếu> 1 sẽ ở trong TEST), nhưng tôi không muốn phân tích cú pháp từng tệp hai lần. Tôi đã thử:
test_c.output = ${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_1.cpp \
${QMAKE_VAR_OBJECTS_DIR}${QMAKE_FILE_BASE}_2.cpp
Chỉ để kiểm tra xem trình biên dịch bổ sung có thể tạo hai tệp cho mỗi lần chạy hay không. Tôi mong đợi một số lỗi như "file somefile_2.cpp doesn't exist
", nhưng dự án biên dịch mà không có lỗi và tệp đầu ra thứ hai bị bỏ qua. Trong Makefile somefile_2.cpp
không có mặt.
Bây giờ tôi đang suy nghĩ về hai biến thể:
Thực hiện một trình biên dịch bổ sung mà tạo ra một kho lưu trữ, nơi mà tất cả các file đầu ra cần thiết sẽ được lưu cùng một lúc. Đặt
tool1.variable_out = TOOL_1_OUT
và thêm hai trình biên dịch bổ sung vớitoolN.input = TOOL_1_OUT
để chỉ "giải nén" các tệp đã lưu trữ (một tệp cho mỗi công cụ) và thêm chúng vào một số biến.Trong trường hợp này, ba lần thực thi sẽ được gọi cho mỗi tệp đầu vào. Đây không phải là tối ưu, nhưng ít nhất trình phân tích cú pháp sẽ chỉ chạy một lần cho mỗi tệp.
Thử nghiệm với tùy chọn
.output_function
. Tạo hàm qmake trả về cùng tên với tên.output
hiện tại, nhưng cũng thêm tên tệp thứ hai vàoHEADERS
.
P.S. Tôi đang sử dụng MinGW x32 4.7, QtCreator 2.7.1, Qt 5.1.0, C++ 11.
tôi Tôi không thể biến phiên bản này thành công, tôi đã sửa đổi điều này cho các nhu cầu của mình và không thể làm cho nó hoạt động được. Và tôi lo lắng về biến thể # 2, nghĩ rằng đây là hack.Tôi nghi ngờ rằng qmake có thể biết rằng đầu tiên (file_1.cpp) phụ thuộc từ nguồn (file.h) vì giá trị trả về output_function của công cụ tùy chỉnh, nhưng điều này không giải quyết thứ hai (file_1.h) Và Makefile có thể cố gắng xây dựng thứ gì đó phụ thuộc từ tệp_1.h trước khi tạo tệp_1.h – user2271079