C ++ Build Systems - ควรใช้อะไร? [ปิด]


136

ฉันกำลังมองหาการเริ่มต้นโครงการใหม่ใน C ++ เพียงแค่ในช่วงเวลาของฉันเองในตอนแรกและฉันกำลังตรวจสอบระบบการสร้างที่พร้อมใช้งาน ดูเหมือนว่าคำตอบคือ "หลายคนและพวกเขาทั้งหมดน่ากลัว"

คุณสมบัติที่ฉันต้องการเป็นพิเศษคือ:

  1. การสนับสนุน C ++ 11
  2. Cross platform (Linux เป็นเป้าหมายหลัก แต่สามารถสร้างได้บน Windows อย่างน้อยเช่นกัน)
  3. สนับสนุนการทดสอบหน่วยที่เหมาะสม
  4. รองรับหลายโมดูลสำหรับการแยกรหัสออก
  5. รองรับการสร้างรหัส (ใช้ asn1c หรือ protobuf - ยังไม่แน่ใจ 100%)
  6. ดูแลรักษาง่าย

ตอนนี้ฉันรู้ว่าฉันสามารถทำได้ 1-4 จากผู้ที่ใช้ CMake และ Autotools ได้ง่ายพอ อาจเป็นกับ SCons และ Waf และคู่อื่น ๆ ด้วย ปัญหาคือฉันไม่เคยทำงานเกี่ยวกับวิธีการสร้างรหัสโดยใช้อย่างถูกต้อง - นั่นคือไฟล์ต้นฉบับที่ไม่มีอยู่จนกว่ากระบวนการบิลด์จะเริ่มทำงานในครั้งแรกดังนั้นไฟล์ต้นฉบับที่ระบบการสร้างจะต้องสามารถแปลงเป็นรหัสปฏิบัติการได้ แต่ไม่รู้จริงจนกว่าจะเริ่มต้นสร้าง ... (โดยเฉพาะอย่างยิ่ง ASN1C สร้างหลายไฟล์ส่วนหัวและแหล่งที่จะต้องสามารถทำงานร่วมกันและชุดของไฟล์ที่สร้างขึ้นจริงขึ้นอยู่กับเนื้อหาของไฟล์ asn ของคุณ) มี ความจริงที่ว่าไม่มีสิ่งใดที่ง่ายต่อการบำรุงรักษา - CMake และ Autotools มีสคริปต์จำนวนมากที่คุณต้องจัดการเพื่อให้ทำงานได้

ดังนั้น - ระบบ build ใดที่แนะนำสำหรับสิ่งนี้ หรือฉันจะติดกับสร้างไฟล์และเชลล์สคริปต์ตอนนี้หรือไม่


11
"มันจะปรากฏว่าคำตอบคือ 'หลายคนและพวกเขาทั้งหมดน่ากลัว'" ก็เป็นความประทับใจของฉันด้วย (ด้วยการเพิ่ม 'น่ากลัวจากมุมมองของฉัน'; ฉันไม่ชอบพูดมากเกินไปกับคำเช่นนี้ ) จริง ๆ แล้วฉันตั้งค่าของตัวเองด้วยเหตุผลอย่างนั้นและมันทำงานได้ดีกว่าที่คาดไว้เพราะมันเป็นสิ่งที่ฉันต้องการและวิธีที่ฉันต้องการให้สิ่งต่าง ๆ ทำงานได้ตลอดเวลา สำหรับบางสิ่งที่ใช้เวลาน้อยลงเล็กน้อยคุณอาจต้องใช้เครื่องมือที่มีอยู่แล้วเลือกเครื่องมือที่ทำให้คุณปวดหัวน้อยกว่าเครื่องมืออื่น ๆ
Christian Stieber

4
ลองทับ
Kerrek SB

ดูเพิ่มเติมได้ที่: stackoverflow.com/q/3349956
ergosys

8
คุณคาดหวังการสนับสนุน C ++ 11 ประเภทใดจากระบบบิลด์? นี่คือสิ่งที่คุณได้รับจากคอมไพเลอร์ระบบบิลด์ไม่แยกวิเคราะห์หรือแม้แต่อ่านไฟล์ต้นฉบับจริง ๆ แค่ส่งต่อให้ใครก็ตามที่ต้องการมันไม่ใช่เหรอ?
บารุค

5
จริง แต่ทำให้ง่ายต่อการบอกคอมไพเลอร์ให้ใช้การสนับสนุน C ++ 11 จะดี g ++ ต้องการหนึ่งค่าสถานะลองใช้ชุดอื่น msvc ดูเหมือนไม่ต้องการอะไรเลย นอกจากนี้ยังมีการสนับสนุนสำหรับการตรวจสอบสิ่ง C ++ 11 คุณสมบัติที่ใช้ได้จะเป็นประโยชน์กับที่ยังแตกต่างระหว่างคอมไพเลอร์ ...
เกรแฮม

คำตอบ:


117

+1 สำหรับ "หลายคนและมันแย่มาก"

แต่ "richest" และ "ปรับขนาดได้มากที่สุด" น่าจะเป็นCMakeซึ่งเป็น Makefile-generator (เช่นสร้าง MSVC ++ *.proj/ ดั้งเดิม*.sln) ไวยากรณ์แปลก ๆ แต่เมื่อคุณเรียนรู้แล้วมันจะช่วยให้คุณสามารถสร้างบิลด์สำหรับแพลตฟอร์มที่ต่างกันได้ ถ้าฉัน "เริ่มต้นสด" CMakeผมอาจจะใช้ ควรจัดการรายการของคุณแม้ว่า "การสร้างรหัส" ของคุณอาจใช้ "a-life-of-the-own" เกินกว่าระบบบิลด์ขึ้นอยู่กับสิ่งที่คุณต้องการทำ (ดูด้านล่าง)

สำหรับโครงการง่ายๆตัวสร้างQMakeก็ใช้ได้ (คุณไม่จำเป็นต้องใช้ไลบรารี Qt เพื่อใช้ QMake) แต่คุณไม่ได้อธิบายว่า "ง่าย" - การสร้างรหัสและ "ขั้นตอนพิเศษ" หมายความว่าคุณอาจต้องการCMakeหรือบางสิ่งที่มี API ที่สมบูรณ์สำหรับส่วนขยายของคุณเช่นScons(หรือWaf)

เราใช้Sconsในที่ทำงาน มันสร้าง "bullet-proof-builds" แต่มันช้ามาก ไม่มีระบบอื่นใดที่จะสามารถใช้เป็นหลักฐานได้เช่นSconsกัน แต่มันช้า มันถูกเขียนใน Python และเราได้ขยายอินเทอร์เฟซสำหรับ "เวิร์กสเปซ - องค์กร" ของเรา (ซึ่งเราเพียงแค่ระบุการพึ่งพาของโมดูล) และนั่นเป็นส่วนหนึ่งของSconsความตั้งใจในการออกแบบ สะดวก แต่งานสร้างนั้นช้า คุณได้รับการสร้างกระสุนกันกระสุน (กล่องนักพัฒนาซอฟต์แวร์ใด ๆ ที่สามารถปล่อยรุ่นสุดท้าย) แต่มันช้า และมันก็ช้า อย่าลืมว่าถ้าคุณใช้Sconsแม้ว่ามันจะช้า และมันก็ช้า

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

ใช่พวกเขาทั้งหมดน่ากลัว

[เกี่ยวกับการสร้างรหัส]

Sconsทำงานกับ "ขั้นตอน" และพวกเขาเป็น "ค่อนข้างคงที่" มันสามารถสร้างรหัสที่สร้างขึ้นโดยเป็นส่วนหนึ่งของงานสร้าง (ผู้คนกำลังทำสิ่งนี้ในสองวิธีที่แตกต่างกัน) แต่สิ่งนี้ได้รับการอธิบายว่า

หากเป็นเรื่องง่าย "ทำการประมวลผลไฟล์บางไฟล์ล่วงหน้าและสร้างไฟล์ต้นฉบับ" หมายความว่าไม่มีปัญหาใด ๆ (คุณมีตัวเลือกมากมายและนี่คือสาเหตุที่qmakeถูกเขียนขึ้นมาเพื่อการmocประมวลผล*.hpp/*.cppไฟล์ล่วงหน้า)

อย่างไรก็ตามหากคุณกำลังทำสิ่งนี้ในลักษณะ "หนักหน่วง" คุณจะต้องเขียนสคริปต์ของคุณเอง ตัวอย่างเช่นเรามีสคริปต์เป็นส่วนหนึ่งของการสร้างที่สอบถามฐานข้อมูลและสร้างคลาส C ++ เพื่อเชื่อมต่อระหว่าง "เลเยอร์" (ในการพัฒนาแอปพลิเคชัน 3 ชั้นแบบดั้งเดิม) ในทำนองเดียวกันเราได้สร้างซอร์สโค้ดเซิร์ฟเวอร์ / ไคลเอนต์ผ่าน IDL และข้อมูลรุ่นที่ฝังไว้เพื่ออนุญาตให้ไคลเอนต์ / เซิร์ฟเวอร์หลายรายทำงานพร้อมกันกับเวอร์ชันที่แตกต่างกัน (สำหรับ "ไคลเอนต์" หรือ "เซิร์ฟเวอร์" เดียวกัน) รหัสแหล่งที่สร้างจำนวนมาก เราสามารถ "เสแสร้ง" นั่นคือ "ระบบการสร้าง" แต่จริงๆแล้วมันเป็นโครงสร้างพื้นฐานที่ไม่สำคัญสำหรับ "การจัดการการกำหนดค่า" ซึ่งส่วนหนึ่งของมันคือ "ระบบการสร้าง" ตัวอย่างเช่นระบบนี้จะต้องมี "take-down" และ "


37
ฉันชอบ Scons ด้วย - แต่ฉันคิดว่ามันช้า
Lothar

1
คุณสามารถรับ CMake เพื่อจัดการการสร้างโค้ดด้วย Makefile wrapper เพื่อทำเฟสที่สองซึ่งเป็นทางเลือกเมื่อสร้างโค้ด ฉันสามารถรองรับการติดตามการพึ่งพาเต็มรูปแบบการออกก่อนกำหนดหลังจากการสร้างรหัสเพื่อกระตุ้นการสร้างใหม่อีกครั้งโปรดดู: javaglue.com/javaglue.html#tag:JavaGlueและcode.google.com/p/javaglue
sdw

3
เกือบ 2 ปีคุณยังถือว่า SCON ช้าหรือไม่ เมื่อฉันเลือกระบบสร้างฉันพบสิ่งนี้และมันมีส่วนทำให้การตัดสินใจของฉันกับ SCons
JBentley

2
@Ben มันจริง แต่ก็ช้า
charley

2
ใครก็ตามที่ดูสิ่งนี้ควรพิจารณา Meson (ซึ่งใช้นินจา)
Matthew D. Scholefield

33

คุณสามารถใช้ Gradle ได้ในตอนนี้: https://docs.gradle.org/current/userguide/native_software.html

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


ฉันเห็นด้วยกับ Gradle Gradle ถูกออกแบบมาให้ปรับขนาดได้ อย่างไรก็ตามมันขึ้นอยู่กับการติดตั้งปลั๊กอินว่ามันรวดเร็วแค่ไหน นอกจากนี้ยังมีค่าใช้จ่ายในการไล่ระดับตัวเอง โปรดทราบด้วยว่าปลั๊กอินบางตัวอาจต้องมีการปรับแต่งสำหรับกรณีการใช้งานของคุณ
JE42

สนใจที่จะเห็นความสนใจของ gradle ในการสนับสนุน C ++ หวังว่าพวกเขาจะสร้างระบบการสร้างที่ดีและมั่นคงสำหรับโครงการ c ++ ที่พวกเราทุกคนหายไป
hbobenicio

@squid ขอบคุณอัปเดตแล้ว
Nate Glenn

1
Gradle นั้นทรงพลัง แต่ก็เรียบง่าย ไม่มีไวยากรณ์แปลก ๆ ไฟล์ gradle.build เดียวมักจะเพียงพอที่จะสร้างโครงการทั้งหมดที่มีเอาต์พุตที่สามารถเรียกใช้งานได้หลายตัว (หลักการทดสอบและอื่น ๆ ) ไม่มีการดัมพ์ไฟล์ในทุกไดเรกทอรีต้นทาง เป็นมิตรกับซุปเปอร์
Overdrivr

1
ฉันใช้เวลาสองวันที่ผ่านมาในการต่อสู้กับ Gradle เพียงแค่พยายามสร้างห้องสมุดแอพและ gtests "hello world" และฉันไม่สามารถพูดได้ว่าฉันสามารถแนะนำได้สำหรับโครงการใหม่ อาจมีเครื่องมือทั้งหมด แต่ไม่มีเอกสารประกอบ (ให้ประโยชน์จากข้อสงสัย) บางทีพวกคุณที่คิดว่าทำงานได้อาจชี้ไปที่แหล่งข้อมูลที่คุณชื่นชอบ?
jwm

16

ฉันพบสิ่งเหล่านี้ฉันยังไม่ได้ใช้ทั้งหมด:

นินจาระบบสร้างขนาดเล็กมุ่งเน้นไปที่ความเร็ว Google ตอนนี้ใช้ในการสร้างนินจา Android แทนยี่ห้อ: การเชื่อมโยง

Shakeระบบสร้างที่ทรงพลังและรวดเร็ว

Tupระบบสร้างประสิทธิภาพสูง การออกแบบตาม ขั้นตอน การวิเคราะห์ทับ

ตอนนี้ทั้งหมดเป็นข้ามแพลตฟอร์มและรองรับ Windows ฉันยังไม่แน่ใจเกี่ยวกับข้อกำหนดที่เหลือของคุณอีกครั้งฉันยังไม่ได้ทดสอบพวกเขาเอง พวกมันถูกใช้ในการพัฒนาเชิงพาณิชย์ CIGเลือกนินจาขึ้นมา ฉันใช้และรักความง่ายและความเร็วของ Ninja ด้วยตัวสร้างโปรเจค สองคนแรกนั้นคล้ายกับ Scons, Ant และอื่น ๆ


1
Tup จะทำให้การค้นหาสัญลักษณ์สับสนไม่ได้เล่นอย่างดีกับระบบบิลด์อื่น ๆ (เลยจริงๆ) ไม่เล่นอย่างดีกับเอาต์พุตแบบสุ่ม (เช่นคลาสที่สร้างโดยjavacกับคลาสภายในซึ่งแยกออกเป็นclass$1.classไฟล์) คือ เขียนไม่ดีและใช้ระบบแฮ็คเพื่อให้บรรลุสิ่งที่มันทำ มันยอดเยี่ยมสำหรับระบบขนาดเล็ก unmaintainable สำหรับโครงการขนาดใหญ่
Qix - MONICA ถูกยกเลิก

@Qix: คุณไม่สามารถแยกเอาท์พุทออกจากที่เก็บของคุณได้หรือไม่?
Kerrek SB

1
@KerrekSB คุณทำได้ แต่นั่นไม่ใช่ปัญหาของการค้นหาสัญลักษณ์ ทับใช้ฟิวส์.tup/mntและเมาท์มิดเดิ้ลของตัวเองเข้าไป จากนั้นจะรันโปรแกรมสร้างทั้งหมดในโฟลเดอร์ (เช่น.tup/mnt/@tupjob-XXXXX) เป็นไดเรกทอรีทำงานเพื่อตรวจสอบการอ่าน / เขียนการบังคับใช้การกำหนดค่าการสร้าง มันทำงานได้ดีเว้นแต่เส้นทางจะถูกเก็บไว้อย่างแน่นอน (เช่นมีสัญลักษณ์) เมื่อคุณรวบรวมไบนารีเส้นทางสัญลักษณ์จะถูกเก็บไว้ในไบนารีเอง ซึ่งหมายความว่าเมื่อ GDB พยายามโหลดสัญลักษณ์มันจะค้นหาtupjobเส้นทางนั้นซึ่งไม่มีอยู่ที่ทำให้เกิดข้อผิดพลาด
Qix - MONICA ถูกยกเลิก

ทั้ง Tup และ Ninja เป็นเครื่องมือระดับต่ำมากเช่นต่ำหรือต่ำกว่า Make ไม่ได้ปรับให้เหมาะกับ C ++ ฉันจะไม่เรียกเครื่องมือเหล่านี้สร้างระบบด้วยตัวเองเพราะพวกเขาขาดคุณสมบัติระดับสูงที่สำคัญมากมายที่ระบบการสร้างจริงเสนอให้จัดการกับโครงการโลกที่ซับซ้อนจริง ระบบเหล่านี้บางระบบอาจใช้ Ninja เป็นแบ็คเอนด์
Johan Boulé

11

Scons เป็นระบบที่เป็นมิตรและยืดหยุ่น แต่คุณพูดถูก Lothar มันช้าจริงๆ

แต่มีวิธีเพิ่มประสิทธิภาพของโปรแกรมที่เขียนด้วย Python การใช้ JIT นี้ ในทุกโครงการที่รู้จัก PyPy เป็นการนำ JIT ที่ได้รับการสนับสนุนอย่างรวดเร็วและได้รับการสนับสนุนอย่างรวดเร็ว - Python 2.7 มาใช้ ความเข้ากันได้ของ PyPy กับ Python 2.7 นั้นยอดเยี่ยมมาก อย่างไรก็ตาม scons ประกาศเป็นโครงการที่ได้รับการสนับสนุนในการทำงานร่วมกันวิกิพีเดีย PyPy Wafบนมืออื่น ๆ ที่จำลองเป็นงูหลามตาม autotools sucessor ได้รับการสนับสนุนอย่างเต็มที่โดยโครงสร้างพื้นฐาน PyPy ในโครงการของฉันความเร็วของการชุมนุมเพิ่มขึ้น 5-7 เท่าในช่วงการเปลี่ยนภาพเป็น PyPy คุณสามารถดูรายงานผลการดำเนินงานจาก PyPy

สำหรับระบบการสร้างที่ทันสมัยและค่อนข้างเร็ว Waf เป็นตัวเลือกที่ดี


เป็นที่น่าสังเกตว่า scons ถูกทำเครื่องหมายเป็น "ใช้ร่วมกันได้" บนหน้า wiki ที่เชื่อมโยงดังนั้นจึงเห็นได้ว่าตอนนี้ใช้งานได้กับ PyPy
ชื่อปลอม

8

ระบบ Google build เป็นทางเลือกที่ดี: http://bazel.io/


3
"ข้ามแพลตฟอร์ม (Linux เป็นเป้าหมายหลัก แต่สามารถสร้างได้บน Windows อย่างน้อยเช่นกัน)" คำถามที่พบบ่อยของ Bazel กล่าวว่า "ขณะนี้เรากำลังดำเนินการปรับปรุงการสนับสนุน Windows อยู่ แต่ก็ยังคงมีวิธีการใช้งานอยู่"
Michael Mrozek

3
ฉันไม่แน่ใจว่ามันเป็นระบบของตัวเองหรือคนที่ตั้งโครงการ แต่ฉันมีอาการปวดหลังที่สำคัญโดยใช้ @ work มันไม่มีความยืดหยุ่นมาก (ในแง่ที่สนับสนุนเพียงวิธีเดียวในการทำสิ่งต่าง ๆ ซึ่งมักจะไม่ดีถ้าไม่น่าขนลุก) ไม่ทรงพลังพอมีเอกสารไม่ดี (นอกเหนือจากกรณีพื้นฐาน) มีชุมชนเล็ก ๆ น้อย ๆ ดังนั้นอย่าคาดหวังว่า ค่อนข้างพึ่งพาได้ด้วยตัวเองอย่าเล่นได้ดีกับ IDEs ส่วนใหญ่ในระบบส่วนใหญ่ ฯลฯ ฯลฯ ฯลฯ ดังนั้นหากคุณเป็นแฟนของ google - อยู่ห่างจากมัน (btw มีเวอร์ชั่น Facebook ของนี้เรียกว่า Buck - สำหรับแฟน Facebook)
Slava

เฮ้ฉันพบว่ามันใช้งานง่ายจริง ๆหลังจากใช้เวลา 6 สัปดาห์ในการพยายามทำให้ CMake ทำงาน ฉันต้องการให้ดาวน์โหลดการอ้างอิงจากบุคคลที่สามและรวบรวมพวกเขา (เพราะฉันคุ้นเคยกับเครื่องมือสร้างที่ดีจาก python และ JavaScript) สิ่งนี้ทำให้ง่าย แต่มีข้อเสียเปรียบที่คุณอาจต้องเขียนไฟล์ bazel ของคุณเองสำหรับบุคคลที่ 3 ที่ไม่สนับสนุน พวกเขาจำเป็นต้องมี repo ส่วนกลางเพื่อเก็บสิ่งเหล่านี้ใน i'ze reckon
CpILL

6

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

Make, CMake และระบบบิลด์ที่คล้ายคลึงกันดูเหมือนจะเป็นถังขยะของมาโคร Waf เป็นแอนะล็อก SCons ฉันพยายาม Waf แต่ SCons จะเป็นมิตรมากขึ้นและฉันก็อยู่กับ SCON

ตามความเห็นของผู้ชม SCons นั้นช้าเกินไป แต่ในช่วงกลางของโครงการฉันไม่เห็นความแตกต่างระหว่างยี่ห้อและ SCons ด้วยการสร้างความเร็ว SCON ทำงานได้ดีกับการสร้างแบบขนานในขณะที่ make มีปัญหาใหญ่

นอกจากนี้ SCons ยังให้คุณได้รับ - กำหนดค่าสร้างปรับใช้สร้างการกำหนดค่าจากเทมเพลตทำการทดสอบและทำงานอื่น ๆ ที่สามารถทำได้สามารถเข้ารหัสด้วย python และ SCons ได้ทั้งหมดในที่เดียว นั่นเป็นข้อได้เปรียบที่ยิ่งใหญ่มาก

สำหรับโครงการง่ายๆ CMake ก็เป็นทางเลือกที่ดีเช่นกัน


3
ปัญหาของฉันที่นี่คือฉันนิสัยเสีย ฉันเป็นนักพัฒนา Java ด้วยอาชีพและเครื่องมือเช่น Gradle ในโลก Java เป็นเครื่องมือชนิดหนึ่งที่ฉันต้องการสำหรับการพัฒนา C ++ ฉันสามารถตั้งค่าโครงการ gradle โดยไม่มีการพึ่งพาภายนอกโดยใช้ไฟล์สร้างบรรทัดเดียว แค่นั้นแหละ. โครงการหลายโมดูลที่มีการพึ่งพาจำนวนมากยังคงทำได้ง่ายเช่นกันและจริง ๆ แล้วมีการชั่งน้ำหนักน้อยกว่าโครงร่าง C ++ ที่เรียบง่าย ...
Graham

ฉันมีปัญหาในการสร้างแพคเกจอื่น ๆ ที่ใช้ Scons เพราะมันไม่ได้เป็นนามธรรมการตั้งค่าระบบที่เป็นนามธรรมเช่น -I รวมถึง dirs และ -L library dirs มันจะไม่ใช้ CFLAGS คุณมักจะต้องแก้ไขสคริปต์ scons แต่ละอันเพื่อให้มันถูกที่แล้ว
59

5

เพียงแค่เพิ่มเซนต์ของฉัน: preake

http://industriousone.com/premake

นอกจากนี้ยังมีหน้าเว็บเฉพาะบนวิกิ


2
น่าเสียดายที่ Premake ไม่รองรับการสร้างรหัสตามข้อกำหนดของ OP และฉันจะไม่เรียกการสนับสนุนสำหรับการทดสอบหน่วย "ดี" แม้ว่าจะมีบางสิ่งที่คุณสามารถทำได้
ergos

@ergosys ฉันสังเกตว่ามดไม่ได้กล่าวถึง, antยังรองรับ C / C ++, ดูว่ามันดีสำหรับคุณหรือไม่, มันเป็นนามสกุลที่ฉันมี, ฉันเพิ่งใช้ Makefiles และ Cmake สำหรับสิ่งนี้
user827992

2

คุณสามารถใช้Ceedling หมายเหตุอย่างไรก็ตามมันรองรับเฉพาะ C เท่านั้นในขณะนี้และควบคู่ไปกับกรอบการทดสอบ Unity และ CMock ของผู้เขียนอย่างแน่นหนา

มันสามารถแยกและแก้ไขเพื่อทำงานกับคอมไพเลอร์ C ++ และการทดสอบหน่วย / กรอบการเยาะเย้ยค่อนข้างง่าย

ทับยังเป็นการกล่าวถึงที่คุ้มค่า มันเร็วมาก แต่ไม่รู้อะไรเกี่ยวกับการทดสอบเฟรมเวิร์กเป็นต้นซึ่งหมายความว่าคุณจะต้องเขียนระบบบิลด์ของคุณเองโดยใช้ Tup หากคุณวางแผนที่จะทำ TDD Tup อาจเป็นวิธีที่จะไป

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