จะรับตัวแปรสภาพแวดล้อมเชลล์ใน makefile ได้อย่างไร?


107

ในเปลือกเมื่อฉันเข้า

echo $demoPath

มันพิมพ์

/usr/local/demo

ฉันจะรับค่าของตัวแปรนี้$demoPathใน makefile ได้อย่างไร

คำตอบ:


163

หากคุณส่งออกตัวแปรสภาพแวดล้อม:

export demoPath=/usr/local/demo

คุณสามารถอ้างถึงโดยใช้ชื่อในmakefile( makeนำเข้าตัวแปรสภาพแวดล้อมทั้งหมดที่คุณตั้งไว้):

DEMOPATH = ${demoPath}    # Or $(demoPath) if you prefer.

หากคุณไม่ได้ส่งออกตัวแปรสภาพแวดล้อมจะไม่สามารถเข้าถึงได้จนกว่าคุณจะส่งออกหรือเว้นแต่คุณจะส่งผ่านอย่างชัดเจนในบรรทัดคำสั่ง

make DEMOPATH="${demoPath}"

หากคุณกำลังใช้อนุพันธ์ C เปลือกทดแทนsetenv demoPath /usr/local/demoสำหรับexportคำสั่ง


3
"ทำการอิมพอร์ตตัวแปรสภาพแวดล้อมทั้งหมดที่คุณตั้งไว้" ได้ผล! ดี ~ ฉันไม่รู้เกี่ยวกับเรื่องนี้มาก่อนขอบคุณมาก
Jialin

@jonathan_leffler ฉันได้รับแรงบันดาลใจจากคำตอบของคุณและฉันก็ทำอะไรที่แตกต่างออกไปเล็กน้อย ฉันตั้งค่า envvar ก่อนที่จะโทรออกโดยไม่ต้องส่งออก: demoPath=/usr/local/demo make. คุณอาจต้องการทดสอบและอาจอัปเดตคำตอบของคุณ ไชโย!
ค.ศ.

@AD ใช่นั่นเป็นกลไกอื่นในการตั้งค่าสำหรับตัวแปรสภาพแวดล้อมสำหรับคำสั่งเฉพาะ เป็นคำถามที่สัมผัสได้เล็กน้อยซึ่งถามว่าจะเข้าถึงค่าของตัวแปรที่มีอยู่ได้อย่างไรแทนที่จะสร้างตัวแปรได้ทันที ไม่ได้หยุดเป็นเทคนิคที่มีประโยชน์ในบางโอกาส
Jonathan Leffler

12

สำหรับผู้ที่ต้องการเอกสารอย่างเป็นทางการเพื่อยืนยันพฤติกรรม

ตัวแปรใน make อาจมาจากสภาพแวดล้อมที่รัน make ตัวแปรสภาพแวดล้อมทุกตัวที่ทำให้เห็นเมื่อเริ่มทำงานจะถูกเปลี่ยนเป็นตัวแปร make ที่มีชื่อและค่าเดียวกัน อย่างไรก็ตามการกำหนดอย่างชัดเจนใน makefile หรือด้วยอาร์กิวเมนต์คำสั่งจะแทนที่สภาพแวดล้อม (หากระบุแฟล็ก '-e' ค่าจากสภาพแวดล้อมจะแทนที่การกำหนดใน makefile

https://www.gnu.org/software/make/manual/html_node/Environment.html


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