Tôi cần thực thi lệnh với add_custom_command
một lần chụp. Việc chuyển hướng shell thành tệp >
không hoạt động và add_custom_command
không có bất kỳ tùy chọn liên quan nào. Tôi làm nó như thế nào?Làm thế nào để chuyển hướng đầu ra của lệnh tùy chỉnh CMake vào một tệp?
Trả lời
(Xin lưu ý rằng tôi đã thay đổi câu trả lời của tôi sau khi điều tra vấn đề này vì bình luận Florian. Thông tin thêm về chỉnh sửa dưới đây)
Các tài liệu của execute_process
nêu rõ rằng nó không sử dụng vỏ trung gian, vì vậy chuyển hướng các nhà khai thác không hoạt động ở đó.
Nhưng điều này không đúng đối với add_custom_command
. Chuyển hướng sẽ hoạt động ở đó như mong đợi. [EDIT] Lý do đôi khi nó dường như không hoạt động là một số sự kết hợp không may của máy phát điện CMake, thông số VERBATIM
và khoảng trống (thiếu) giữa >
và tên tệp.
Hóa ra nếu bạn chắc chắn rằng có một khoảng trống giữa >
và tên tập tin nó làm việc với trong hầu hết các trường hợp, ngay cả với VERBATIM
:
add_custom_command(OUTPUT ${some-file}
COMMAND cmake --version > ${some-file}
VERBATIM # optional
)
Lưu ý về một giải pháp thay thế: trước đây Tôi nghĩ rằng add_custom_command
, giống như execute_process
không sử dụng trình bao trung gian nên tôi đã đề xuất gọi một tập lệnh CMake có chứa lệnh execute_process
chạy lệnh thực, chuyển hướng kết quả của nó bằng tùy chọn OUTPUT_FILE
.
Nếu vì một số lý do giải pháp trên vẫn không cho bạn, hãy thử các giải pháp thay thế việc sử dụng một ExecuteProcessWrapper.cmake
- 1. Làm thế nào để chuyển hướng đầu ra của .exe vào một tệp trong python?
- 2. Làm thế nào để chuyển hướng đầu ra của hệ thống() vào một tệp?
- 3. Chuyển hướng đầu ra lệnh "đặt" vào tệp nhật ký
- 4. Cách chuyển hướng đầu ra của lệnh shell vào đầu vào tập lệnh Python?
- 5. Lệnh làm sạch tùy chỉnh CMake
- 6. cách chuyển hướng đầu ra của lệnh sang hai tệp
- 7. Làm thế nào để làm cho cấu hình lại CMake phụ thuộc vào tệp tùy chỉnh?
- 8. có cách nào để chuyển hướng đầu vào và đầu ra đến cùng một tệp không?
- 9. Làm thế nào để bạn chuyển hướng đầu vào tiêu chuẩn vào một tệp trong dòng lệnh Windows?
- 10. Chuyển hướng đầu ra từ vỏ erlang vào một tệp
- 11. Làm thế nào tôi có thể hướng đầu ra của QProcess vào một tệp?
- 12. Làm cách nào để chuyển hướng đầu ra của DBMS_OUTPUT.PUT_LINE tới một tệp?
- 13. chuyển hướng đầu ra của lệnh 'find' sang 'vim'
- 14. Làm cách nào để chuyển hướng đầu ra của hàm chết sang một tệp trong Perl?
- 15. Làm cách nào để tùy chỉnh đầu ra của Jenkins?
- 16. Làm thế nào để tùy chỉnh đầu ra Zend_Tool?
- 17. Làm thế nào để viết đầu ra tập lệnh vào tệp và dòng lệnh?
- 18. Làm cách nào để tùy chỉnh đầu ra của loại tùy chỉnh bằng printf?
- 19. Làm thế nào để lưu/chuyển hướng đầu ra từ lệnh Laravel Artisan?
- 20. Có thể chuyển hướng đầu ra của một tệp lô trong tập lệnh không?
- 21. Chuyển hướng đầu ra lldb thành tệp
- 22. Các khối mã chuyển hướng đầu ra đầu vào
- 23. Làm thế nào để lưu/chuyển hướng đầu ra từ lệnh Laravel 5 Artisan?
- 24. Làm thế nào để chuyển hướng đầu ra từ lệnh dd đến/dev/null?
- 25. Chuyển hướng đầu ra grep sang tệp
- 26. Làm cách nào để thay đổi tên tệp đầu ra của cuda_compile_ptx trong CMake?
- 27. Chuyển hướng đầu ra bằng lệnh "màn hình"
- 28. Chuyển hướng đầu ra Trace.axd
- 29. lệnh tùy chỉnh cmake để sao chép và đổi tên
- 30. Làm cách nào để chuyển hướng đầu ra trong web.py
Tôi nghĩ rằng việc thực hiện các lệnh tùy chỉnh CMake có thể là nền tảng phụ thuộc. Bạn có thể thêm một ví dụ trong đó lệnh tùy chỉnh không sử dụng trình bao trung gian không? Tôi đã sử dụng thành công chuyển hướng stdout/stderr với các trình tạo Ninja và Visual Studio. Những máy phát điện này làm tiền tố 'cmd.exe/c' cho các lệnh tùy chỉnh trên Windows. Và các lệnh đường ống được kiểm tra trong [kiểm tra đơn vị lệnh tùy chỉnh] của CMake (https://github.com/Kitware/CMake/blob/master/Tests/CustomCommand/CMakeLists.txt#L231). – Florian
@ Florian, bạn nói đúng, tôi đã sai. Tôi đang sửa câu trả lời của mình. –
Tôi đã tìm thấy chuỗi đó trên diễn đàn của nhà phát triển CMake: http://cmake.3232098.n2.nabble.com/Redirect-output-from-add-custom-target-td7583901.html. Họ viết, chuyển hướng trong 'add_custom_target()' có thể không hoạt động trong một số trường hợp. Từ phía bên kia, cả hai 'add_custom_command()' và 'add_custom_target()' chấp nhận tùy chọn 'VERBATIM', không có sence cho đến khi shell được tham gia. Ngược lại, 'execute_process()' không chấp nhận tùy chọn đó và có nhận xét rõ ràng về chuyển hướng. Vì vậy, nơi nó là sự thật? – Tsyvarev