+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" และ "