คำสั่งในการรวบรวมและเรียกใช้โปรแกรม C ++ คืออะไร?


89

ฉันยังใหม่กับ Linux ฉันใช้ Ubuntu 11.04 และไม่ทราบวิธีการคอมไพล์และรันโปรแกรม C ++ ฉันจำเป็นต้องทราบคำสั่งในการรวบรวมและดำเนินการโปรแกรม C ++ ได้ในลินุกซ์


1
คำตอบใด ๆ ช่วยคุณได้บ้าง
lindhe

คำตอบ:


108

ในการรวบรวมรหัส c ++ ของคุณให้ใช้:

g++ foo.cpp

foo.cppในตัวอย่างคือชื่อของโปรแกรมที่จะรวบรวม

สิ่งนี้จะสร้างไฟล์ปฏิบัติการในไดเรกทอรีเดียวกันa.outซึ่งคุณสามารถเรียกใช้ได้โดยพิมพ์ข้อความนี้ในเทอร์มินัลของคุณ:

./a.out

g ++ควรเป็น $ PATH ของคุณอยู่แล้วดังนั้นคุณไม่จำเป็นต้องโทร/usr/bin/g++อย่างชัดเจน แต่คุณสามารถใช้ตัวหลังในทุกกรณี

foo.cppควรอยู่ในไดเรกทอรีเดียวกับที่คุณใช้งานคำสั่ง หากมีข้อสงสัยใด ๆ คุณสามารถตรวจสอบให้แน่ใจว่าคุณอยู่ในไดเรกทอรีเดียวกันโดยการพิมพ์ls foo.cppหรือhead foo.cpp(หากคุณต้องการตรวจสอบว่าคุณทำงานถูกต้องfooหรือไม่)

เท่าที่สังเกตจาก @ Con-F-ใช้คอมไพเลอร์มักจะทำให้ปฏิบัติการไฟล์นี้ แต่ถ้าไม่คุณสามารถทำเองนี้ (ดังนั้นคำสั่งที่จะดำเนินการ./a.outหรือเทียบเท่าจะทำงาน):

chmod +x ./a.out

หากต้องการระบุชื่อของไฟล์เอาต์พุตที่คอมไพล์แล้วเพื่อที่จะไม่มีชื่อa.outให้ใช้-oกับคำสั่ง g ++ ของคุณ

เช่น

g++ -o output foo.cpp

จะเป็นการคอมไพล์foo.cppไฟล์ไบนารี่ที่มีชื่อoutputและคุณสามารถพิมพ์./outputเพื่อรันโค้ดที่คอมไพล์ได้


6
คอมไพเลอร์มักจะทำให้ไบนารี ( a.outในกรณีนี้) ปฏิบัติการ chmod +x a.outถ้าไม่ได้คุณสามารถทำได้โดยการพิมพ์: เมื่อโปรแกรมที่คอมไพล์ของคุณสามารถเรียกใช้งานได้คุณสามารถรันมันพิมพ์./a.out- จุดและตัวบ่งชี้สแลชที่คุณต้องการรัน
con-f-use

@Rajeshkumar คุณพบคำตอบอย่างใดอย่างหนึ่งเหล่านี้ต่อความชอบของคุณหรือไม่? ถ้าเป็นเช่นนั้นคุณสามารถทำเครื่องหมายหนึ่งในนั้นเป็นคำตอบที่ยอมรับได้ (โดยการเลือกเห็บใต้ลูกศรโหวตขึ้น / ลง) เพื่อให้เราสามารถลากเส้นภายใต้ปัญหานี้

มีความแตกต่างระหว่าง g ++ foo.c -o output และ g ++ -o output foo.c หรือไม่
Goldname

21

ฉันตั้งสมมติฐานไว้สองข้อที่นี่:

  1. คุณมีไฟล์ / โปรแกรมต้นฉบับ C ++ อยู่แล้วพร้อมที่จะสร้าง
  2. คุณได้ตั้งค่าระบบการสร้างบนคอมพิวเตอร์ของคุณ

วิธีที่ง่ายที่สุดในการรวบรวมโปรแกรม C ++ บน Ubuntu หรือ Linux distro อื่น ๆ สำหรับเรื่องนั้นคือการพิมพ์

g++ main.cpp -o main
  • g ++เป็นการเรียกใช้องค์ประกอบ C ++ ของGCCซึ่งเป็น defacto compiler สำหรับ C / C ++ และโฮสต์ทั้งหมดของภาษาอื่น ๆ บนแพลตฟอร์ม Linux ปัจจุบันเป็นผู้รวบรวมเพียงความสามารถในการรวบรวมเคอร์เนล Linux
  • main.cppเป็นไฟล์ต้นฉบับ c ++ ที่คุณต้องการรวบรวม
  • -o mainระบุชื่อของไฟล์เอาต์พุตที่คุณต้องการสร้างเมื่อแหล่งรวบรวม ไฟล์ต้นทางเป้าหมายและไฟล์เอาต์พุตเป้าหมายสามารถกลับด้านได้หากคุณต้องการดังนั้นจึงg++ -o main main.cppใช้ได้อย่างเท่าเทียมกัน
  • ในการรันโปรแกรมนั้นคุณต้องทำ. / main ในเทอร์มินัล

คำสั่งข้างต้นถือว่าคุณอยู่ในตำแหน่งของไฟล์ต้นฉบับอยู่แล้ว แต่อาจจะระบุทั้งไฟล์ต้นฉบับและไฟล์เอาต์พุตเป้าหมายเป็นไดเร็กทอรี ตัวอย่างเช่น

g++ ~/Desktop/main.cpp -o ~/Projects/main

จะรวบรวมไฟล์ต้นฉบับ C ++ ที่อยู่บนเดสก์ท็อปของคุณและวางไบนารีที่เรียกใช้งานได้ในProjectsโฟลเดอร์ในโฮมไดเร็กตอรี่ของคุณ ./Projects/mainการเรียกใช้ปฏิบัติการนี้เรียกใช้


5

นี่คือวิธีที่ฉันชอบรวบรวมกับ g ++

$g++ -W -Wall -pedantic -o programName -p sourceFile.cpp

-W: Print extra warning messages for some problems.
-Wall: Enable all the warnings about questionable code
-pedantic: Show all the warnings demanded by strict ISO compliance
-o programName: place the executable output in programName sourceFile.cpp: the 
name of our source code file
-p: Generate extra code to write profile information suitable for the analysis program prof

1
-p: Generate extra code to write profile information suitable for the analysis program prof.
ฮันส์

ฉันชอบคำตอบของคุณ มันนำข้อเสนอแนะพิเศษ แต่คุณควรปรับวลีให้เป็นที่ยอมรับโดยทั่วไป
LinuxSecurityFreak

1

คุณต้องการ g ++ สำหรับ gcc อาจไม่รวบรวมไฟล์ cpp ได้อย่างง่ายดาย
คุณต้องเรียนรู้เป็นกลุ่มหรือ emacs เพื่อเขียนรหัส C
ลองใช้สิ่งนี้ในเทอร์มินัลของคุณ:

พิมพ์โปรแกรมทดสอบและบันทึก:

$vim hello.cc

คอมไพล์hello.ccด้วย g ++:

$g++ hello.cc -o hello

ดำเนินการ:

$./hello

นี่./หมายความว่าไฟล์ exe อยู่ภายใต้ dir ปัจจุบัน


3
gcc เป็นคอมไพเลอร์ GNU สำหรับคอมไพเลอร์ C และ C ++ และ OP ไม่จำเป็นต้องรู้ว่าเป็นกลุ่มหรือ emacs ในการเขียนรหัส C มีตัวแก้ไขข้อความอื่น ๆ จำนวนมากและ IDE ของมันลอยไปมา
Nitin Venkatesh

3
แม้ว่าฉันจะชอบเสียงเรียกเข้าหากมีคนต่อสู้กับการหาวิธีการแก้ปัญหาอยู่แล้วการแนะนำเสียงเรียกเข้านั้นไม่ได้มีประโยชน์มาก
johanvdw

โดยส่วนตัวฉันไม่ชอบviแต่มันไม่สำคัญ คุณควรหลงทางจากการแนะนำบรรณาธิการที่เฉพาะเจาะจงทุกคนใช้ของเขา / เธอเองอยู่แล้ว
LinuxSecurityFreak

0

g++เป็น front-end to gcc(GNU คอมไพเลอร์คอลเลคชั่น) ที่มีมาโคร c ++ ที่กำหนดไว้ล่วงหน้าและตัวเลือก / แฟล็กเริ่มต้นที่แตกต่างกัน

การคอมไพล์รหัส c ++ ด้วยgccสะดวกเมื่อg++ไม่พร้อมใช้งานด้วยเหตุผลหลายประการอันที่จริงมันเป็นเรื่องของการเชื่อมโยงไปยังไลบรารี c ++ -lstdc++และแจ้งให้ gcc เพื่อปฏิบัติต่อการป้อนข้อมูลเป็นรหัส c ++ (โดยใช้.Cส่วนขยายหรือบังคับภาษาด้วย-x)
อื่น ๆ ที่ถูกต้องต่อท้ายชื่อไฟล์ C ++: .cc, .cp, .cxx, .cpp, .CPP,.c++

ตัวอย่าง:

gcc cpp_code.C -lstdc++ ส่วนขยายตัวพิมพ์ใหญ่ ( .C) เป็นสิ่งสำคัญที่ gcc จะรู้ว่าเป็นไฟล์ c ++

หรือระบุภาษาที่ป้อนอย่างชัดเจน:

gcc -x c++ cpp_code.txt -lstdc++ ส่วนขยายสามารถเป็นอะไรก็ได้หรือแม้แต่ไม่มีอะไร

โดยค่าเริ่มต้นผลลัพธ์ (หลังจากการคอมไพล์สำเร็จ) เป็นa.outไฟล์ที่สามารถรันได้./a.out


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