Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> Linux

แก้ไข: No targets specified and no makefile found

ไม่ว่าจะทำงานกับ Ubuntu, Debian หรือ Red Hat อาจเจอข้อผิดพลาด make: *** No targets specified and no makefile found. Stop. เนื่องจากเป็นปัญหาทั่วไปของ GNU Make ทั้งหมด อาจเจอบนการ implement Unix หลายร้อยแบบ หมายความว่าไม่มีไฟล์ชื่อ makefile หรือ Makefile ใน current working directory ของคุณ โชคดีที่ข้อผิดพลาดนี้แก้ได้ง่าย

วิธีที่ 1: หา Makefile ในไดเรกทอรีปัจจุบัน

อาจลองรันคำสั่ง make อีกครั้งในไดเรกทอรีปัจจุบัน ดูว่าขึ้น error เดิมหรือไม่ สำคัญหากเปิดเทอร์มินัลใหม่และลองหาไดเรกทอรีที่ถูกต้องแล้ว หรือเคย用 cd หลังจากครั้งล่าสุดที่ลองรัน GNU make

สมมติว่ายัง error ให้ลองรัน ls หรือ dir ดูว่าไฟล์อะไรอยู่ใน current directory คุณอาจไม่อยู่ในส่วนที่ถูกต้องของ directory tree หากเห็น directories ที่ควรอยู่ใน root / หรือ home ~ ให้รัน cd เพื่อไปยังตำแหน่งที่ถูกต้องสำหรับรัน make

มีโอกาสคุณอยู่ไกลกว่าที่คาดไว้ ในตัวอย่างเราลองรัน make จาก /var/crash และไม่ได้เลย ไม่คาดหวังให้รันจากที่นี่ได้ เพราะไฟล์ในตำแหน่งนี้มีแค่ crash reports ที่ไม่เกี่ยวข้อง

แก้ไข: No targets specified and no makefile found

ส่วนใหญ่คุณจะอยากรัน make จากไดเรกทอรีใน home directory เช่น หาก build GNU nano ล่าสุดจาก source น่าจะมีไดเรกทอรีที่ ~/nano-2.9.6 ที่ cd ไปแล้วรัน make ใหม่ อาจลอง ls อีกครั้งก่อน make เพื่อแน่ใจว่ามี makefile ในไดเรกทอรีสำหรับ build

จำไว้ว่าต้อง configure การติดตั้งก่อน คำสั่ง configure สร้างสภาพแวดล้อมที่สมบูรณ์สำหรับ GNU compiler หากไม่หา makefile เจอแม้ใน project directory ที่ถูกต้อง ให้รัน ./configure ขณะยังอยู่ในไดเรกทอรี ตามด้วยคำสั่ง make หาก compile ถูกต้อง สามารถติดตั้งโปรเจกต์ด้วย sudo make install แต่จำไว้ว่า อย่าสร้างอะไรเป็น root จึงไม่ควรรัน sudo make หรืออะไรนอกเหนือจาก installation

วิธีที่ 2: ระบุ Makefile แบบกำหนดเอง (Specifying a Custom Makefile)

สมมติว่าวิธีแรกแก้ปัญหาได้ ไม่ต้องทำอะไรเพิ่ม แต่มี 2 กรณีพิเศษหากวิธีก่อนหน้าไม่ได้ผล ทั้งคู่เกี่ยวกับการเขียน makefile เองสำหรับโปรเจกต์ที่กำลัง configure ด้วยมือ

สามารถระบุ makefile แบบกำหนดเองที่ชื่อไม่ใช่ makefile ตรงตัว โดยใช้ตัวเลือก -f เช่น หากมี backup makefile ชื่อ makefile.bak ให้ระบุด้วย make -f makefile.bak จากบรรทัดคำสั่ง แทนที่ makefile.bak ด้วยชื่อไฟล์ไหนก็ได้ และเพิ่ม -i หากต้องการ ignore errors ใน makefile แบบกำหนดเองหรือล้าสมัยขณะคอมไพล์ปกติ แต่นิยมไม่แนะนำ เพราะควรแก้ไข makefile หากมีอะไรผิด

กรณีอีกอย่างเกี่ยวกับ case sensitivity ไฟล์ต่อไปนี้เป็นไฟล์ต่างกันหมดในวิธี Unix:

  • Makefile
  • makefile
  • makeFile
  • MakeFile
  • MakefilE

โปรแกรมที่ configure เองอาจไม่รู้จัก makefile ที่มีตัวพิมพ์ใหญ่-เล็กแปลกๆ หากเขียนด้วยมือสำหรับโปรเจกต์เขียนโค้ด ให้เปลี่ยนชื่อเป็น makefile แทน (แม้ใช้ -i เพื่อให้ GNU make หาเจอก็ได้) จำไว้ว่าหากเขียนทุกอย่างถูกต้อง ยังคงรัน ./configure จากโปรเจกต์ตัวเองได้ เพื่อบังคับสร้างสภาพแวดล้อมที่ถูกต้องและหลีกเลี่ยงปัญหานี้ตั้งแต่แรก