Tôi có một dự án CMake với nhiều tiểu dự án. Mỗi người trong số họ có thể sử dụng một hàm tôi cung cấp để tạo một tệp văn bản nhỏ với một số thông tin nhất định (bằng cách gọi add_custom_command). Ở bước cuối cùng, tôi muốn kết hợp tất cả các tệp đó thành một tệp văn bản lớn.CMake: thêm phụ thuộc vào add_custom_command động
Tôi đã tạo lệnh tùy chỉnh tìm kiếm tệp được tạo (tất cả ở một nơi) và hợp nhất chúng.
Vấn đề là tôi muốn thực hiện bước cuối cùng này phụ thuộc vào tất cả các bước nhỏ được thực hiện trong các dự án con trong khi tôi thực sự không biết có bao nhiêu tệp sẽ được cung cấp.
lệnh cuối cùng của tôi trông giống như:
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/)
và tôi tạo-nhỏ-text-file-for-each-TDA lệnh trông giống như:
add_custom_command(OUTPUT /path/${sub_project_name}.txt
COMMAND create /path/${sub_project_name}.txt)
Và khi tôi tạo ra các tập tin nhỏ Tôi muốn làm điều gì đó giống như để tạo "combination.txt" phụ thuộc vào /path/${sub_project_name}.txt
Vì vậy, tôi ước tôi có thể:
add_dependency(combination.txt /path/${sub_project_name}.txt)
Tuy nhiên, điều này chỉ hoạt động cho các mục tiêu.
Tôi cũng đã cố gắng sử dụng set_source_files_properties với OBJECT_DEPENDS, nhưng nó dường như không hoạt động (có thể nó có ý định sẽ được sử dụng với các tập tin cpp add_target không?)
Cách cuối cùng để có được nó làm việc tôi thấy là để sử dụng biến bộ nhớ cache sẽ tích lũy tất cả các đường dẫn tệp nhỏ đó và sau đó sử dụng nó như sau:
add_custom_command(OUTPUT combination.txt
COMMAND create combination.txt from all files from /path/
DEPENDS ${all_small_files_list})
nhưng đây là điều cuối cùng tôi muốn làm.
Nó sẽ hoạt động nhưng không chính xác như mong đợi: Mỗi khi tôi gọi, tất cả các mục tiêu (kết hợp, dự án và dự án 2) sẽ được xây dựng lại - vì vậy các tệp sẽ được regenrated. Đây không phải là tốt đẹp như nó có thể được;) Hành vi mong đợi đối với tôi là không tái tạo bất kỳ tệp nào trừ khi cần thiết. Theo tài liệu của CMake - add_custom_target đang được xây dựng mọi lúc. Tôi ước tôi có một giải pháp làm việc như add_custom_command - chỉ xây dựng khi bất kỳ sự phụ thuộc nào thay đổi. –
Bạn sử dụng điều gì làm phụ thuộc để tạo project.txt? Tôi _think_ những gì cmake-doc muốn nói là, một custom_target luôn được kiểm tra xem nó có được xây dựng lại hay không - ít nhất nó dường như hoạt động như thế đối với tôi. –
Vâng, sau khi đọc một số thích hợp làm thế nào chúng ta làm điều đó, tôi phải thừa nhận rằng tôi đã quá sớm. Xem cập nhật của tôi về câu trả lời. –