2010-01-28 45 views

Trả lời

11

alias make="make -j 8", giả sử bash shell

+2

đợi .. như thế nào đây không phải đệ quy gọi làm tức make -> làm -j 8 -> làm -j 8 -j 8 -> làm -j 8 -j 8 -j 8 – anon

+6

Bí danh thay đổi lệnh make thành mặc định 'make -j 8' Nó không gọi lệnh make. – Gazler

+0

Điều này cũng có thể được đặt trong tệp .bashrc, do đó bạn không phải nhập nó vào mỗi trình bao, .bashrc nằm trong thư mục chính của bạn (trong Debian ít nhất). – Grundlefleck

5

Nếu bạn đang sử dụng dòng lệnh bạn có thể làm:

alias make='make -j 8' 

này sẽ chỉ là tạm thời, để làm cho nó vĩnh viễn bạn cần phải thêm nó vào .bashrc

Đọc tại đây: http://www.linfo.org/make_alias_permanent.html

0

Tại sao không tạo ra một makefile bên ngoài, gọi một makefile khác như thế này, điều này được nhân rộng từ hướng dẫn here.

 
    SUBDIRS = foo bar baz 
    .PHONY: subdirs $(SUBDIRS) 
    subdirs: $(SUBDIRS) 
    $(SUBDIRS): 
      $(MAKE) -j 8 -C [email protected] 

    foo: baz 
+0

thường là khi bạn muốn loại hành vi này trên mỗi máy, không phải dự án. – xaxxon

10

Câu trả lời gợi ý alias make='make -j 8' là câu trả lời đúng cho câu hỏi của bạn.

Tuy nhiên, tôi khuyên bạn không nên làm điều đó!

Bằng mọi cách, hãy sử dụng bí danh để lưu gõ - nhưng gọi nó là cái gì đó khác hơn make.

Nó có thể là OK cho bất kỳ dự án bạn đang làm việc trên; nhưng có thể viết các makefiles với các phụ thuộc bị thiếu mà không hoạt động đúng với -j, và nếu bạn gặp phải một điều như vậy, bạn sẽ bị bỏ lại tự hỏi tại sao việc xây dựng lại không thành công theo cách bí ẩn cho bạn nhưng hoạt động tốt cho người khác.

(Điều đó nói rằng, nếu bạn làm alias make, bạn có thể nhận bash để bỏ qua các bí danh bằng cách gõ \make.)

+0

Tại sao không chỉ đề nghị sử dụng biến môi trường MAKEFLAGS như Eric nói? – xaxxon

55

Thiết lập môi trường MAKEFLAGS biến để -j 8. Nếu bạn đang sử dụng csh hoặc tcsh, bạn có thể làm điều này với setenv MAKEFLAGS '-j 8'. Nếu bạn đang sử dụng bash, bạn có thể làm điều này với export MAKEFLAGS='-j 8'. Bạn có thể muốn đặt lệnh này trong tệp khởi động của trình bao, chẳng hạn như .cshrc hoặc .bashrc (trong thư mục chính của bạn).

Thận trọng: Đặt mặc định như thế này sẽ áp dụng cho tất cả các yêu cầu thực hiện, kể cả khi bạn "tạo" một dự án khác với dự án của bạn hoặc chạy tập lệnh gọi. Nếu dự án không được thiết kế tốt, nó có thể có vấn đề khi nó được xây dựng với nhiều công việc thực thi song song.

+0

Sẽ không hoạt động với GNU Hãy 4.1 – sanmai

-1

Bạn có thể di chuyển /usr/bin/make-/usr/bin/make_orig và làm /usr/bin/make kịch bản này:

#!/bin/sh 

/usr/bin/make_orig -j 8 [email protected] 

Hãy chắc chắn để chạy chmod +x /usr/bin/make.

Thử phương pháp này nếu phương pháp đơn giản hơn trong my other answer không hoạt động. Phương pháp này không an toàn và có một chút kludge.

+0

Điều này chỉ đơn giản là xấu. Hãy tưởng tượng nếu bạn cần cập nhật nhị phân thực hiện của mình. – sanmai

+0

@sanmai Có, MAKEOPTS tốt hơn nhiều; cf. [câu trả lời khác của tôi ở trên] (https://stackoverflow.com/questions/2151605/make-make-default-to-make-j-8/42658101#42658101). – Geremia

1

Thêm

MAKEOPTS='-j8' 
MAKEFLAGS='-j8' 

để /etc/make.conf (tạo ra nó nếu nó không tồn tại).

Nếu điều đó không làm việc, thêm

export MAKEOPTS='-j8' 
export MAKEFLAGS='-j8' 

vào hồ sơ của toàn hệ thống của bạn (ví dụ:/etc/hồ sơ).

Đối với tôi, MAKEOPTS không hoạt động. Có thể MAKEFLAGS là tất cả những gì cần thiết.

+0

Chỉ cần bạn biết, không thể làm việc này. https://gist.github.com/sanmai/dcc31ae20afa6e8ba4721f174fe05fd9 – sanmai

+0

@sanmai Tại sao không? Nó làm việc cho tôi. – Geremia

+0

Kiểm tra ý chính để xem cho chính bạn. 'MAKEFLAGS' chỉ giữ lại' -j', không có chữ số – sanmai

Các vấn đề liên quan