Trong Unix, tôi có thể chạy 'make' trong một thư mục mà không cần cd vào thư mục đó trước không?


Câu trả lời:


338

make -C /path/to/dir


8
Grump - đó không phải là trong tiêu chuẩn thực hiện; nó phải là một phần mở rộng GNU. Vì bạn nói Linux và Unix, không rõ bạn muốn gì, nhưng tùy chọn -C sẽ không hoạt động trên Solaris 10 (/ usr / ccs / bin / make), AIX (/ usr / bin / make), hoặc HP-UX 11,23 (/ usr / bin / make). Tuy nhiên, 1 trong 4 không quá tệ.
Jonathan Leffler

6
Nó cũng hoạt động trong BSD, vì vậy nó không chỉ là một phần mở rộng GNU.
Chris Dodd

4
đảm bảo 'C' ở dạng chữ hoa
m.r226

100

Như đã lưu ý trong các câu trả lời khác, make (1) có một -C tùy chọn cho việc này; một số lệnh có các tùy chọn tương tự (ví dụ tar). Điều hữu ích cần lưu ý là đối với các lệnh khác thiếu các tùy chọn như vậy có thể được sử dụng như sau:

(cd /dir/path && command-to-run)

Điều này chạy lệnh trong một shell con đầu tiên có thư mục làm việc của nó thay đổi (trong khi chỉ để lại thư mục làm việc của shell cha). Ở đây && được sử dụng thay vì ; để bắt các trường hợp lỗi trong đó thư mục không thể thay đổi.


22

Nếu lý do bạn không muốn cd vào một thư mục là vì bạn cần ở lại thư mục hiện tại cho một nhiệm vụ sau này, bạn có thể sử dụng Pushd và popd:

pushd ProjectDir ; make ; popd

Điều đó đi vào ProjectDir, chạy make và quay trở lại nơi bạn đang ở.


11

Ngoài ra, bạn có thể sử dụng:

make --directory /path/to/dir

-3

trang điểm:

all:
    gcc -Wall -Wpedantic -std=gnu99 -g src/test.c -o build/test

run:
    ./build/test

hoặc là

run:
    ./../build/test

Vân vân.


1
Câu trả lời hoàn toàn bỏ lỡ câu hỏi - đó là về cách gọi make, chứ không phải cách viết makefile.
Petr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.