2009-03-02 12 views
41

Tôi chỉ có một máy tính lõi tứ mới và nhận thấy rằng nmake chỉ sử dụng 1 quy trình.Làm thế nào để sử dụng tất cả các lõi cho nmake?

Tôi đã từng sử dụng công cụ có nút chuyển đổi -j4 để khởi chạy 4 quy trình. Tương đương nmake là gì?

[sửa] Dựa trên những thông tin dưới đây tôi đã có thể để thêm một lệnh để tập tin dự án qmake tôi:

QMAKE_CXXFLAGS + =/MP

nào có hiệu quả đã làm nó cho tôi. Cảm ơn nhiều.

Trả lời

20

Theo MSDN, không có tùy chọn như vậy cho nmake.

Bạn tuy nhiên có thể làm cho trình biên dịch xây dựng nhiều file song song bằng cách sử dụng tùy chọn /MP với VC++ biên dịch dòng lệnh và chuyển nhiều file cùng một lúc:

> cl /MP a.cpp b.cpp c.cpp 

Tuy nhiên lưu ý rằng hầu hết Makefiles không gọi trình biên dịch như thế này - họ thường gọi trình biên dịch riêng biệt cho mỗi tệp nguồn riêng lẻ, điều này sẽ ngăn chặn tùy chọn /MP làm bất kỳ điều gì hữu ích.

+1

Chỉ không .o, nhưng .obj. Trình biên dịch VC++ tạo ra .obj, GCC - .o, AFAIK – abatishchev

+15

Một cách thuận tiện để sử dụng cờ này là để cl.exe lấy nó từ biến môi trường "CL". Đặt nó trong thuộc tính hệ thống của bạn hoặc gõ nó trên dòng lệnh: "thiết lập CL =/MP" – jturcotte

3
+1

đó là biên dịch song song của nhiều tệp .cpp trong cùng một lời gọi của trình biên dịch - không xây dựng song song của nhiều mục tiêu 'make' – Alnitak

+0

Nó rất thú vị, làm thế nào để bật công tắc này trong VS2008! Tôi không thể tìm thấy nó – abatishchev

+0

nó không phải là một "nmake" tùy chọn, nó là một "c1" tùy chọn (tức là để sử dụng với trình biên dịch dòng lệnh) – Alnitak

6

Incredibuild tuyên bố để có thể chạy nmake được xây dựng trên nhiều lõi/nhiều máy. Tôi không có kinh nghiệm về nó.

+0

Nó rất đơn giản thực sự và hoạt động tuyệt vời. Đây là một tài liệu tham khảo tốt: http://xoreax.helpserve.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=171 – ttvd

+0

Yep! Tôi đã làm việc trên một ứng dụng. mất khoảng 1h 20 phút. để biên dịch đầy đủ. Với Incredibuild và khoảng 10 máy đa bộ xử lý, cùng một ứng dụng. biên soạn trong 5 phút. Cải thiện khá ấn tượng nếu bạn hỏi tôi! –

+0

Liên kết đến tham chiếu về cách tăng tốc nMake bằng IncrediBuild đã thay đổi thành [link] (http://xoreax.helpserve.com/staff/Knowledgebase/Article/Edit/105). Tuyên bố từ chối trách nhiệm - tác giả của nhận xét này hoạt động tại IncrediBuild – Dori

3

Điều này không hoạt động đối với các tệp makefiles bình thường, nhưng có một cài đặt trong Visual Studio 2005 cho phép bạn tạo nhiều tệp .vcproj cùng một lúc (miễn là tệp không phụ thuộc vào nhau). Công cụ -> Tùy chọn -> Dự án và Giải pháp -> Xây dựng và Chạy ->X số lượng tối đa các dự án xây dựng song song.

32

QT đã công cụ phải cho điều này http://qt.gitorious.org/qt-labs/jom

+0

Tìm thấy tuyệt vời !! – SPWorley

+7

Các tệp nhị phân jom được biên dịch sẵn có tại đây: ftp://ftp.qt.nokia.com/jom/ – Lucas

+1

Trang chủ mới cho jom là https://wiki.qt.io/Jom. – Hossein

8

Các CMake 2.8.1 RC1, như đối với thời điểm viết này nó sẵn sàng để thử, không mang máy phát điện mới cho nmake được gọi là NMake Makefiles JOM và nó tạo ra nmake với các thiết lập cụ thể cho Jom , đó là sự thay thế của NMake. Vì vậy, nó cho phép xây dựng đa xử lý cho phép sử dụng NMake.

37

khác, cách phi Qt liên quan đến tổng quát để nói nmake sử dụng tất cả các lõi là để thiết lập biến môi trường CL để /MP:

set CL=/MP 
nmake 

sẽ sử dụng tất cả các lõi CPU.

+1

Như tôi đã hiểu, điều này chỉ giúp ích nếu nhiều tệp được biên dịch bằng cùng một lệnh. – Zitrax

+0

@Zitrax: bạn là chính xác. Thông thường, bạn biên dịch một dự án (bó tệp) để nó hoạt động. –

+2

Dự án tôi đã xem xét biên dịch một vài trăm tệp, nhưng mỗi dự án sử dụng một lệnh cl riêng biệt, như 'cl a.cpp, cl b.cpp, cl c.cpp, ...' Vì vậy, tôi muốn chỉ ra rằng nó dường như không giúp đỡ trong tình huống như vậy với nmake trừ khi hệ thống xây dựng được viết lại để cung cấp một số tệp cho mỗi lệnh cl như 'cl a.cpp b.cpp c.cpp ...'. – Zitrax