ฉันจะรวบรวม / เรียกใช้ C หรือ C ++ ในคอนโซล Unix หรือเทอร์มินัล Mac ได้อย่างไร
(ฉันรู้ว่าลืมแล้วเรียนรู้อีกครั้งเวลาเขียนมัน)
ฉันจะรวบรวม / เรียกใช้ C หรือ C ++ ในคอนโซล Unix หรือเทอร์มินัล Mac ได้อย่างไร
(ฉันรู้ว่าลืมแล้วเรียนรู้อีกครั้งเวลาเขียนมัน)
คำตอบ:
หากเป็นโปรแกรมต้นฉบับอย่างง่าย:
make foo
ตำแหน่งที่ไฟล์ต้นฉบับคือ foo.c หรือ foo.cpp เป็นต้น
คุณไม่จำเป็นต้องมี makefile ด้วยซ้ำ Make มีกฎในตัวเพียงพอที่จะสร้างไฟล์ต้นฉบับของคุณลงในไฟล์เรียกทำงานที่มีชื่อเดียวกันคือส่วนขยายลบ
การเรียกใช้งาน executable ที่เพิ่งสร้างขึ้นนั้นเหมือนกับการรันโปรแกรมใด ๆ - แต่ส่วนใหญ่คุณจะต้องระบุพา ธ ไปที่ executable เพราะเชลล์จะค้นหาเฉพาะสิ่งที่อยู่ใน$PATH
การค้นหา executables และส่วนใหญ่ไม่รวมไดเรกทอรีปัจจุบัน ( .
)
ดังนั้นในการเรียกใช้ไฟล์ปฏิบัติการที่สร้างขึ้นfoo
:
./foo
make main.cpp
make main
gcc main.cpp -o main.out
./main.out
Undefined symbols for architecture x86_64
ปัญหาฉันแก้ไขคำสั่งดังต่อไปนี้: gcc -lstdc++ main.cpp -o main.out
และใช้งานได้บน Mac ของฉัน ผ่านทางลิงค์: stackoverflow.com/questions/11852568/…
นี่คือคำสั่งที่ใช้กับเครื่อง Unix ทั้งหมด ... ฉันใช้มันบน Linux / Ubuntu แต่ใช้งานได้ใน OS X เช่นกัน พิมพ์คำสั่งต่อไปนี้ในTerminal.app
$ g++ -o lab21 iterative.cpp
-o
เป็นตัวอักษร O ไม่เป็นศูนย์
lab21
จะเป็นไฟล์ปฏิบัติการของคุณ
iterative.cpp
คือไฟล์ c ++ ของคุณ
หลังจากที่คุณเรียกใช้คำสั่งนั้นให้พิมพ์คำสั่งต่อไปนี้ในเทอร์มินัลเพื่อเรียกใช้โปรแกรมของคุณ:
$ ./lab21
สองขั้นตอนสำหรับฉัน:
ครั้งแรก:
make foo
แล้ว:
./foo
./foo
ดูนโน่ว่าคำตอบที่ได้รับการยอมรับนั้นไม่มีคำสั่งที่สำคัญชิ้นนี้
การประมวลผลแอปพลิเคชันทั้งหมดในสภาพแวดล้อม Unix (Linux, Mac OS X, AIX ฯลฯ ) ขึ้นอยู่กับพา ธ การค้นหาที่เรียกใช้งานได้
คุณสามารถแสดงพา ธ นี้ในเทอร์มินัลด้วยคำสั่งนี้:
echo $ PATH
ใน Mac OS X (โดยค่าเริ่มต้น) สิ่งนี้จะแสดงเส้นทางการค้นหาที่คั่นด้วยโคลอนต่อไปนี้:
/ usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin
ดังนั้นความสามารถในการประมวลผลใด ๆ ในไดเรกทอรีที่ระบุสามารถเรียกใช้ได้โดยพิมพ์ชื่อ ตัวอย่างเช่น:
cat mytextfile.txt
สิ่งนี้ทำงาน /bin/cat
และแสดง mytextfile.txt ไปยังเทอร์มินัล
ในการรันคำสั่งอื่น ๆ ที่ไม่ได้อยู่ในพา ธ การค้นหาที่สามารถเรียกทำงานได้คุณจะต้องมีคุณสมบัติพา ธ ไปยังไฟล์ปฏิบัติการได้ ดังนั้นว่าฉันมีปฏิบัติการที่เรียกว่า MyProgram ในไดเรกทอรีบ้านของฉันบน Mac OS XI สามารถมีคุณสมบัติครบถ้วนเช่น:
/ ผู้ใช้ / โอลิเวอร์ / MyProgram
หากคุณอยู่ในตำแหน่งที่อยู่ใกล้กับโปรแกรมที่คุณต้องการเรียกใช้คุณสามารถรับรองชื่อด้วยพา ธ บางส่วน ตัวอย่างเช่นถ้าMyProgram
อยู่ในไดเรกทอรี/Users/oliver/MyProject
I และฉันอยู่ในโฮมไดเรกทอรีของฉันฉันสามารถผ่านการรับรองชื่อปฏิบัติการเช่นนี้และมีการดำเนินการ:
MyProject / MyProgram
หรือว่าฉันอยู่ในไดเรกทอรี/Users/oliver/MyProject2
และฉันต้องการที่จะรัน/Users/oliver/MyProject/MyProgram
ฉันสามารถใช้เส้นทางสัมพัทธ์เช่นนี้เพื่อรันมัน:
../MyProject/MyProgram
ในทำนองเดียวกันถ้าฉันอยู่ในไดเรกทอรีเดียวกันกับ MyProgram
ฉันต้องใช้เส้นทางสัมพัทธ์ "ไดเรกทอรีปัจจุบัน" ไดเรกทอรีปัจจุบันที่คุณอยู่คืออักขระเครื่องหมายจุดตามด้วยเครื่องหมายทับ ตัวอย่างเช่น:
./MyProgram
เพื่อกำหนดไดเรกทอรีที่คุณใช้งานอยู่ในปัจจุบัน pwd
คำสั่ง
หากคุณมักจะวางโปรแกรมไว้ในฮาร์ดดิสก์ที่คุณต้องการเรียกใช้โดยไม่ต้องมีคุณสมบัติของชื่อ ตัวอย่างเช่นหากคุณมีไดเรกทอรี "bin" ในไดเรกทอรีภายในบ้านของคุณสำหรับเชลล์สคริปต์ที่ใช้เป็นประจำของโปรแกรมอื่น ๆ คุณควรเปลี่ยนพา ธ การค้นหาที่เรียกใช้งานได้
สิ่งนี้สามารถทำได้อย่างง่ายดายโดยการสร้างหรือแก้ไข.bash_profile
ไฟล์ที่มีอยู่ในโฮมไดเรกทอรีของคุณและเพิ่มบรรทัด:
#!/bin/sh
export PATH=$PATH:~/bin
นี่คือการใช้อักขระ tilde (~) เป็นทางลัดสำหรับ / Users / oliver นอกจากนี้โปรดทราบว่าบรรทัด hash bang (#!) ต้องเป็นบรรทัดแรกของไฟล์ (หากยังไม่มีอยู่) โปรดทราบว่าเทคนิคนี้ต้องการให้เชลล์ล็อกอินของคุณทุบตี (ค่าเริ่มต้นใน Mac OS X และการแจกแจง Linux ส่วนใหญ่) นอกจากนี้โปรดทราบว่าหากคุณต้องการให้โปรแกรมของคุณติดตั้งไว้~/bin
เพื่อใช้ในการกำหนดค่าตามความต้องการสำหรับระบบปฏิบัติการคุณควรจัดลำดับคำสั่งส่งออกใหม่ดังนี้
export PATH=~/bin:$PATH
ไรอันฉันกำลังเปลี่ยนสิ่งนี้เป็นคำตอบแทนที่จะเป็นความคิดเห็นเพราะดูเหมือนว่าฉันสั้นเกินไป ทำทั้งหมดนี้ใน "เทอร์มินัล"
ในการใช้คอมไพเลอร์ G ++ คุณต้องทำสิ่งนี้:
นำทางไปยังไดเร็กทอรีที่คุณเก็บไฟล์ * .cpp
cd ~/programs/myprograms/
(~ เป็นทางลัดสำหรับบ้านของคุณเช่น / Users / Ryan / programs / myprograms / แทนที่ด้วยตำแหน่งที่คุณใช้งานจริง)
รวบรวมมัน
g++ input.cpp -o output.bin
(output.bin สามารถเป็นอะไรก็ได้ที่มีส่วนขยายใด ๆ จริงๆแล้ว bin เป็นเรื่องปกติในยูนิกซ์)
ไม่ควรมีการส่งคืนหากประสบความสำเร็จและไม่เป็นไรโอเคโดยทั่วไปคุณจะได้รับผลตอบแทนจากความล้มเหลว
อย่างไรก็ตามหากคุณพิมพ์ls
คุณจะเห็นรายการไฟล์ในไดเรกทอรีเดียวกัน ตัวอย่างเช่นคุณจะเห็นโฟลเดอร์อื่น ๆ input.cpp และ output.bin
จากภายในไดเรกทอรีตอนนี้รันด้วย ./outbut.bin
วิธีกะทัดรัดในการดำเนินการดังกล่าวอาจเป็น:
make foo && ./$_
ยินดีที่จะมีหนึ่งซับเพื่อให้คุณสามารถเรียกใช้ปฏิบัติการของคุณอีกครั้งได้อย่างง่ายดาย
สมมติว่าไดเรกทอรีปัจจุบันไม่ได้อยู่ในเส้นทางไวยากรณ์คือ ./[name of the program]
สมมติว่าไดเรกทอรีปัจจุบันไม่ได้อยู่ในเส้นทางไวยากรณ์คือ
ตัวอย่างเช่น ./a.out
เพิ่มการติดตามเพื่อรับคำเตือนที่ดีที่สุดคุณจะไม่เสียใจ หากทำได้ให้รวบรวม WISE (คำเตือนคือข้อผิดพลาด)
- Wall -pedantic -Weffc++ -Werror
ในการรวบรวมโปรแกรม C หรือ C ++ มีคำสั่งทั่วไป:
make filename
./filename
make จะสร้างซอร์สไฟล์ของคุณเป็นไฟล์เรียกทำงานที่มีชื่อเดียวกัน แต่ถ้าคุณต้องการใช้วิธีมาตรฐานคุณสามารถใช้คอมไพเลอร์ gcc เพื่อสร้างโปรแกรม C & g ++ สำหรับ c ++
สำหรับ C:
gcc filename.c
./a.out
สำหรับ C ++:
g++ filename.cpp
./a.out
makefile
การใช้งาน แม้สำหรับโครงการขนาดเล็กมาก (= หนึ่งไฟล์) ความพยายามอาจคุ้มค่าเพราะคุณสามารถมีการตั้งค่าคอมไพเลอร์หลายชุดเพื่อทดสอบสิ่งต่างๆ การดีบักและการปรับใช้ทำได้ง่ายขึ้นด้วยวิธีนี้
อ่านmake
คู่มือดูเหมือนว่าจะค่อนข้างนานในแวบแรก แต่ส่วนใหญ่คุณสามารถเรียดไป โดยรวมแล้วฉันใช้เวลาไม่กี่ชั่วโมงและทำให้ฉันมีประสิทธิภาพมากขึ้น
ฉันพบลิงค์นี้พร้อมเส้นทาง:
http://www.wesg.ca/2007/11/how-to-write-and-compile-c-programs-on-mac-os-x/
โดยทั่วไปคุณทำ:
gcc hello.c
./a.out (or with the output file of the first command)
gcc hello.c -o a.out
? gcc hello.c
ซึ่งจะเป็นเช่นเดียวกับ
เพียงแค่ใส่ในไดเรกทอรีซึ่งเป็นไฟล์ c / cpp ของคุณ
สำหรับการคอมไพล์และรันโค้ด c
$gcc filename.c
$./a.out filename.c
สำหรับการคอมไพล์และรันโค้ด c ++
$g++ filename.cpp
$./a.out filename.cpp
"$" เป็นสัญลักษณ์ terminal Mac เริ่มต้น
ในการรวบรวมและเรียกใช้ cpp ซอร์สโค้ดจากเทอร์มินัล Mac จำเป็นต้องทำดังต่อไปนี้
การเรียกใช้ไฟล์. C โดยใช้เทอร์มินัลเป็นกระบวนการสองขั้นตอน ขั้นตอนแรกคือพิมพ์ gcc ในเทอร์มินัลแล้วปล่อยไฟล์. C ไปยังเทอร์มินัลแล้วกดEnter:
username$ gcc /Desktop/test.c
ในขั้นตอนที่สองเรียกใช้คำสั่งต่อไปนี้:
username$ ~/a.out
สำหรับการรันไฟล์ c ++ รันคำสั่งด้านล่างชื่อไฟล์สมมติว่าเป็น "main.cpp"
1. คอมไพล์เพื่อสร้างออบเจ็กต์ไฟล์จากไฟล์ c ++
g++ -c main.cpp -o main.o
2. ตั้งแต่#include <conio.h>
ไม่สนับสนุนใน MacOS ดังนั้นเราจึงควรใช้ทางเลือกที่สนับสนุนใน Mac #include <curses.h>
ที่เป็น ตอนนี้ไฟล์อ็อบเจ็กต์จะต้องถูกแปลงเป็นไฟล์ที่ปฏิบัติการได้ หากต้องการใช้เรามีการใช้ห้องสมุดcurses.h
-lcurses
g++ -o main main.o -lcurses
3. ตอนนี้เรียกใช้ปฏิบัติการ
./main