มันสมเหตุสมผลไหมที่จะเขียน build script ใน C ++?


15

ฉันใช้ CMake เพื่อสร้างโครงการ IDE / makefiles ของฉัน แต่ฉันยังต้องเรียก "สคริปต์" แบบกำหนดเองเพื่อจัดการไฟล์ที่คอมไพล์ของฉันหรือแม้แต่สร้างรหัส

ในโครงการก่อนหน้านี้ฉันใช้ Python และมันก็โอเค แต่ตอนนี้ฉันมีปัญหาร้ายแรงในการจัดการการพึ่งพาจำนวนมากในสองโครงการขนาดใหญ่มากที่ฉันทำงานอยู่ดังนั้นฉันจึงต้องการลดการพึ่งพาทุกที่

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

  • ในการสร้างโครงการทั้งหมดจะต้องใช้คอมไพเลอร์ C ++ และ CMake เท่านั้นไม่มีสิ่งอื่นใด (การอ้างอิงอื่น ๆ ทั้งหมดคือ C หรือ C ++)
  • ความปลอดภัยประเภท C ++ (เมื่อใช้ C ++ ที่ทันสมัย) ทำให้ทุกอย่างง่ายขึ้นเพื่อให้ "ถูกต้อง";
  • เป็นภาษาที่ฉันรู้จักดีกว่าดังนั้นฉันจึงสบายใจได้แม้ว่าฉันจะสามารถเขียนรหัส Python ได้ดีก็ตาม
  • ความเป็นไปได้ที่จะได้รับความเร็วในการประมวลผล (แต่ฉันไม่คิดว่ามันจะเข้าใจได้จริง);

อย่างไรก็ตามฉันคิดว่าอาจมีข้อเสียบางอย่างและฉันไม่แน่ใจเกี่ยวกับผลกระทบที่แท้จริงเนื่องจากฉันยังไม่ได้ลอง:

  • อาจจะนานกว่าที่จะเขียนโค้ด (ที่บอกว่าฉันไม่แน่ใจเพราะฉันมีประสิทธิภาพเพียงพอใน C ++ ในการเขียนบางสิ่งที่ทำงานได้อย่างรวดเร็วดังนั้นสำหรับระบบนี้มันอาจจะไม่นานนักที่จะเขียน) (เวลารวบรวมควรจะ ' ไม่เป็นปัญหาสำหรับกรณีนี้);
  • ฉันต้องสมมติว่าไฟล์ข้อความทั้งหมดที่ฉันจะอ่านเมื่ออินพุตอยู่ใน UTF-8 ฉันไม่แน่ใจว่าสามารถตรวจสอบได้ง่ายที่ runtime ใน C ++ และภาษาจะไม่ตรวจสอบให้คุณ
  • ห้องสมุดใน C ++ นั้นยากต่อการจัดการมากกว่าในภาษาสคริปต์

ฉันขาดประสบการณ์และการมองการณ์ไกลดังนั้นบางทีฉันอาจขาดข้อดีและข้อเสีย ดังนั้นคำถามคือ: มันสมเหตุสมผลไหมที่จะใช้ C ++ สำหรับสิ่งนี้? คุณมีประสบการณ์ในการรายงานและเห็นข้อดีและข้อเสียที่อาจสำคัญหรือไม่


1
ทั้งนี้ขึ้นอยู่กับล่ามภาษาเดียวสำหรับการสร้างเท่านั้นที่ดูเหมือนจะไม่เลวร้ายนักโดยเฉพาะอย่างยิ่งเนื่องจากเป็น Python ซึ่งเป็นแบบพกพาแพร่หลายมากบน Linux และสามารถใช้งานได้อย่างง่ายดายบน Windows หากคุณต้องการไลบรารี Python เพิ่มเติมคุณสามารถใช้ virtualenv และจะไม่เพิ่มอะไรเลยนอกจากไฟล์ Python หนึ่งไฟล์ (ซึ่งคุณสามารถจัดส่ง) การเชื่อมต่ออินเทอร์เน็ตและการวางท่อประปาเล็กน้อยเพื่อตั้งค่า virtualenv ติดตั้งในและเรียกใช้งานจริงของคุณ สร้างสคริปต์ในสภาพแวดล้อมนั้น คุณสามารถใช้สคริปต์พิเศษในงานสร้างและการเชื่อมต่ออินเทอร์เน็ตตามความต้องการ

คุณสามารถเดาการเข้ารหัสของข้อความด้วยความน่าเชื่อถือที่ดีพอสมควร
DeadMG

@DeadMG ใช่ แต่ทำด้วยมือถ้าทำงานมากเกินไป (ถ้าคุณต้องการเดาที่ดีและไม่ จำกัด ตัวเองเป็น "คือ ascii หรือ unicode นี้และถ้าเป็น unicode จำนวนบิตและลำดับไบต์คืออะไร") และ การเพิ่มการพึ่งพาอื่น (หากมีไลบรารี่ที่ว่างและฟรีสำหรับเรื่องนี้) เอาชนะจุดที่ปล่อยไปที่ C ++ เพื่อหยุดขึ้นอยู่กับ Python

@delnan ใช่ แต่ยังมีอีกหลายภาษาที่จะติดตั้ง จากคำอธิบายของคุณการพึ่งพาใด ๆ เพิ่มเติมจะไม่ "แย่เกินไป" แต่ฉันกำลังพิจารณาเพราะมีหลายสิ่งที่ต้องจัดการอยู่แล้วดังนั้นมันอาจช่วย จำกัด ภาษาที่ใช้เช่นกัน ฉันยังใช้ภาษาสคริปต์ฝังตัว (นำมาใช้ใน C ++ โดยตรงในโครงการ), javascript / HTML / CSS, XML และรูปแบบอื่น ๆ ที่มีอยู่มากมายที่ต้องจำไว้
Klaim

2
คุณจะใช้อะไรในการสร้างสคริปต์สร้าง c ++
jk

คำตอบ:


24

เพียงใช้ Python

ฉันพัฒนาใน C ++ และสร้างสคริปต์ของฉันใน Python และฉันรู้สึกเจ็บปวดที่ได้สร้างสคริปต์ใน C ++:

  • Python ทำให้การจัดการพจนานุกรมรายการพจนานุกรมที่ซ้อนกันของพจนานุกรมรายการเป็นต้น (ตัวอย่างเช่นสคริปต์ตัวหนึ่งของฉันใช้ลำดับชั้นหลายระดับของเครื่องมือรุ่นเครื่องมือและเส้นทางรุ่นเครื่องมือทั้งหมด ) C ++ สามารถทำเช่นเดียวกันกับเทมเพลตและคลาสที่กำหนดเอง แต่มันมีความละเอียดมากขึ้น (ซึ่งแปลเป็นบรรทัดของโค้ดที่มากขึ้น
  • งูหลามให้ห้องสมุดระดับสูงและการปฏิบัติเช่น XML และการจัดการ JSON, กระบวนการย่อยและos.walk อีกครั้ง C ++ สามารถทำสิ่งนี้ได้ แต่การค้นหาห้องสมุดเรียนรู้ API ของพวกเขานั้นทำได้อย่างถูกต้องรวบรวมการโทร (ซึ่งมักจะเป็นระดับที่ต่ำกว่า) ฯลฯ
  • สคริปต์การสร้างเป็นกิจกรรมที่ไม่เพิ่มมูลค่า (ยืมคำศัพท์จากลีน) มันจะดีกว่าถ้าใช้ภาษาระดับสูงที่สุดเท่าที่จะทำได้เพื่อให้พวกเขาทำเร็วที่สุดเพื่อกลับไปทำงานซึ่งเป็นประโยชน์ต่อผู้ใช้ของคุณ
  • จากประสบการณ์ของฉันการสร้างสคริปต์มีแนวโน้มที่จะเติบโตในวิธีที่ไม่คาดฝัน แม้ว่างานในตอนแรกจะดูเรียบง่ายสำหรับ C ++ แต่มันอาจซับซ้อนได้อย่างรวดเร็ว เมื่อมีข้อกำหนดใหม่เกิดขึ้นบ่อยครั้งที่จะจัดการกับสคริปต์ Python ได้ง่ายกว่าการทำใน C ++ (ซึ่งอาจต้องค้นหาหรืออ่านบน API ไลบรารีใหม่ ฯลฯ )

เกี่ยวกับข้อดีที่คุณแสดงสำหรับ C ++:

  • การเพิ่มการพึ่งพา (Python) เพียงครั้งเดียวไม่ควรทำให้งานสร้างของคุณซับซ้อน มันเป็นมาตรฐานสำหรับการติดตั้ง Linux ส่วนใหญ่แล้ว ขอบคุณห้องสมุด "แบตเตอรี่ที่รวมอยู่" ของไพ ธ อาจจะง่ายต่อการจัดการมากกว่าไลบรารี C ++ ที่สคริปต์สร้างของคุณจะขึ้นอยู่กับ
  • ความปลอดภัยของประเภทที่ C ++ ให้นั้นมีประโยชน์มากที่สุดสำหรับโครงการขนาดใหญ่ไม่ใช่สคริปต์ขนาดเล็ก
  • Python ช่วยเติมเต็ม C ++ ได้เป็นอย่างดี (ระดับสูงเมื่อเทียบกับระดับต่ำกว่าพิมพ์แบบไดนามิกและพิมพ์แบบคงที่ ฯลฯ ) และสามารถรวมเข้ากับ C ++ ได้เป็นอย่างดี (ขอบคุณ SWIG และ Boost.Python) หากคุณต้องการทำเช่นนั้น คุ้มค่ากับการเรียนรู้สำหรับโปรแกรมเมอร์ C ++
  • ดังที่คุณกล่าวไว้ความเร็วในการเรียกใช้งานควรไม่ใช่แบบอื่น

เราทำสิ่งนี้ (python builds) หลังจากหนึ่งปีของการต่อสู้กับ cmake ในโครงการ cross paltform ในตอนท้ายเราไม่ต้องกังวลกับการพยายามตรวจสอบการพึ่งพา (ส่วนที่ซับซ้อนที่สุดของงานสร้าง) ตั้งแต่อัตโนมัติสร้างคุณต้องการที่จะสร้างทุกอย่างอยู่แล้วและใน C ++ มี dependancies ซับซ้อนจำนวนมาก
มาร์ติน Beckett

1

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

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


1

อย่าเขียนสคริปต์ด้วยตัวคุณเองคุณกำลังพยายามทำซ้ำและสร้างวงล้อใหม่

การใช้งานบางอย่างเช่นsconsหรือแม้กระทั่ง Maven 3 ซึ่งมีการสนับสนุนสำหรับ C ++ สร้างระบบ

ระบบการสร้างที่ดีโดยไม่คำนึงถึงภาษาไม่ควรใช้ตรรกะที่กำหนดเองในรูปแบบของสคริปต์เพื่อสร้างสิ่งประดิษฐ์ที่ปฏิบัติการได้

หากคุณต้องเขียนสคริปต์สำหรับระบบบิลด์เพื่อปรับแต่งมันไม่ใช่ระบบบิลด์ที่ดี การเขียนปลั๊กอินสำหรับระบบบิลด์เป็นเรื่องราวที่แตกต่างกันไป แต่ก็ยังคงเป็นสิ่งที่ควรคำนึงถึงสภาพแวดล้อม / ฮาร์ดแวร์เป็นส่วนใหญ่และควรเป็นสิ่งที่ไม่ค่อยได้ใช้


1
ตามที่ฉันอธิบายฉันใช้ cmake แล้ว แต่ฉันยังต้องการสคริปต์ที่กำหนดเองให้ทำ ฉันกำลังพูดถึงสคริปต์ที่กำหนดเองเหล่านั้นไม่ใช่กระบวนการสร้างเอง
Klaim

1
ฉันชอบ Maven - สคริปต์ที่จำเป็นในการสร้างโปรแกรม "Hell World" C นั้นยาวกว่าโปรแกรม!
quant_dev

@quant_dev ฉันจำได้ครั้งแรกที่ฉันใช้ Maven ในหน้าเว็บของตัวเองพวกเขาแนะนำให้เริ่มต้นกับคนที่รู้จัก Maven อยู่แล้วเนื่องจากเป็นการยากที่จะตั้งค่าในครั้งแรก นั่นเป็นสัญญาณแรกที่ฉันไม่ต้องการให้ทำ!
เบรดี้

ฉันชอบ SCons มันค่อนข้างช้า แต่ใช้งานง่ายมาก
quant_dev

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

0

หากต้องการมุ่งเน้นคำถาม:

มันสมเหตุสมผลไหมที่จะเขียน build script ใน C ++?

คำตอบคือง่ายไม่มี

คำตอบที่ได้รับการยอมรับในปัจจุบันนั้นย่อลงในไพ ธ อนและแสดงรายการข้อกังวลที่ถูกต้องทั้งหมด แต่ฉันต้องการเพิ่มเหตุผลที่ไม่ขึ้นกับภาษา:

จริงๆคุณไม่ต้องการอะไรสคริปต์ในใด ๆภาษาเรียบเรียงถ้าคุณสามารถช่วยได้:

  • คุณจะต้องมีสคริปต์ในการบูตสคริปต์!
  • หรือคุณจะต้องตรวจสอบสคริปต์ที่คอมไพล์ลงในการควบคุมแหล่งที่มา (และทำให้มันสอดคล้องกับแหล่งที่ตรวจสอบแล้ว!)
  • ทันใดนั้นสคริปต์ก็มีการกำหนดค่าบิลด์สำหรับสคริปต์ที่แนบมาด้วย (จำเป็นต้องได้รับการดูแล!)

นอกจากนี้ไปกับคำตอบอื่น ๆ :

อาจเป็นไปได้ว่าคุณไม่ต้องการใช้ภาษาสคริปต์ "ดิบ" ในการเขียนสคริปต์สร้างของคุณ (ฉันเข้าใจว่า CMake จะใช้ Intricacies ในการจัดการ C ++)

สิ่งที่คุณอาจจะควรทำคือการเลือกหนึ่งของการสร้าง ระบบ . ออกไป ที่นั่น และดูว่าหนึ่งเหมาะกับการเรียกเก็บเงินของคุณ ความสามารถในการสคริปต์ / ส่วนขยาย / เล่นได้ดีกับ CMake / crossplatformness

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