Một mẹo có thể giúp người sử dụng CMake
Tùy chọn -jN không hoạt động khi một cuộc gọi makefile làm đệ quy như cmake-makefiles thường làm. Nhưng có một biện pháp khắc phục một lần nữa hoạt động vì trong các makefiles tạo ra các cuộc gọi CMake thông qua cú pháp như vậy.
$(MAKE) -f CMakeFiles\Makefile2 <subproject>
Điều này có nghĩa bạn có thể thay đổi MAKE biến:
mingw32-make "MAKE=mingw32-make -j3"
Bây giờ mỗi khi một tiểu dự án-làm được khởi động, nó một lần nữa nhận được tùy chọn "-j3". Nhưng lưu ý rằng điều này có hiệu quả không giới hạn số lượng biên dịch song song thành 3 như bạn mong đợi. Nếu bạn có nhiều hơn 3 dự án không phụ thuộc vào nhau trên cùng một hệ thống phân cấp thì tất cả 3 dự án sẽ xây dựng song song và mỗi dự án khởi chạy 3 bước biên dịch. Kết quả trong 9 bước biên dịch song song.
Khi chúng ta xem xét kỹ hơn Makefile hàng đầu được tạo bởi cmake thì chúng ta thấy rằng đích "tất cả" về cơ bản chỉ bắt đầu tạo phụ.
$(MAKE) -f CMakeFiles\Makefile2 all
Vì vậy, chúng ta có thể loại bỏ một lớp tiểu dự án xử lý song song bằng cách gọi
mingw32-make "MAKE=mingw32-make -j3" -f CMakeFiles\Makefile2 all
Nhưng điều này đã hy sinh tiến độ báo cáo.
Tôi hy vọng điều này sẽ giúp ích cho bạn.
Quyền của bạn. Tôi đã làm cho nó hoạt động như bạn mô tả - tôi chỉ cần gỡ rối một makefile khủng khiếp để tìm một điểm thích hợp để làm -j (gọi điện thoại làm cho gọi làm ...). – Oliver
nếu bạn đang sử dụng trình bao Cygwin/MinGW: đừng quên đặt biến hệ thống 'shell' thành' cmd' (nếu không sh hoặc sh.exe sẽ được sử dụng theo mặc định (ví dụ trên cygwin ...) và bạn đã thắng không thể hỗ trợ thực thi đa tiến trình). chỉ cần xuất 'SHELL = CMD'. dễ dàng. –
@Karako Noooo, xin vui lòng _don't_ làm điều đó. 'sh' chỉ hoạt động. Nó là nền tảng chéo. Nó không có vấn đề song song. (trên _cygwin_ anyway - không thể xác minh cho _mingw_.) 'cmd' chỉ là khủng khiếp. – bobbogo