ใน Unix ฉันสามารถเรียกใช้ 'make' ในไดเรกทอรีโดยไม่ต้อง cd'ing ไปยังไดเรกทอรีนั้นก่อนหรือไม่


210

ใน Unix ฉันสามารถเรียกใช้makeในไดเรกทอรีโดยไม่ต้องcd'ไปที่ไดเรกทอรีนั้นก่อนได้หรือไม่?

คำตอบ:


338

make -C /path/to/dir


8
Grump - นั่นไม่ได้อยู่ในมาตรฐานทำให้; มันจะต้องเป็นส่วนขยายของ GNU เนื่องจากคุณพูดว่า Linux และ Unix จะไม่ชัดเจนที่คุณต้องการ แต่ตัวเลือก -C จะไม่ทำงานบน Solaris 10 (/ usr / ccs / bin / make), AIX (/ usr / bin / make) หรือ HP-UX 11.23 (/ usr / bin / make) ถึงกระนั้น 1 จาก 4 ก็ไม่ได้แย่เกินไป
Jonathan Leffler

6
มันทำงานได้ใน BSD เช่นกันดังนั้นมันจึงไม่ใช่แค่ส่วนขยาย GNU
Chris Dodd

4
ตรวจสอบให้แน่ใจว่า 'C' เป็นตัวพิมพ์ใหญ่
m.r226

101

ดังที่ระบุไว้ในคำตอบอื่น ๆ ทำให้ (1) มี-C ตัวเลือกสำหรับสิ่งนี้ หลายคำสั่งมีตัวเลือกที่คล้ายกัน (เช่น tar) มันจะมีประโยชน์ที่จะต้องทราบว่าสำหรับคำสั่งอื่น ๆ ที่ไม่มีตัวเลือกดังกล่าวสามารถใช้ต่อไปนี้:

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

สิ่งนี้จะรันคำสั่งในเชลล์ย่อยซึ่งมีการเปลี่ยนแปลงไดเร็กทอรีการทำงานก่อน (ขณะที่ทิ้งไดเร็กทอรีการทำงานของพาเรนต์เชลล์ไว้คนเดียว) ที่นี่&& ใช้แทน; การจับกรณีข้อผิดพลาดที่ไม่สามารถเปลี่ยนไดเรกทอรี


22

หากเหตุผลที่คุณไม่ต้องการ cd ไปยังไดเรกทอรีเป็นเพราะคุณต้องอยู่ในไดเรกทอรีปัจจุบันสำหรับงานในภายหลังคุณสามารถใช้ pushd และ popd:

pushd ProjectDir ; make ; popd

สิ่งนั้นจะเข้าสู่ ProjectDir ทำการสร้างและกลับไปยังที่ที่คุณอยู่



-3

Makefile:

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

run:
    ./build/test

หรือ

run:
    ./../build/test

เป็นต้น


1
คำตอบพลาดคำถามอย่างสมบูรณ์ - มันเกี่ยวกับวิธีเรียกใช้ make, ไม่ใช่วิธีเขียน makefile
Petr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.