คำถามติดแท็ก cmake

5
การจัดระเบียบที่เก็บ Git ด้วยโมดูลย่อยที่ซ้อนกันทั่วไป
ฉันเป็นแฟนตัวยงของGit ย่อยโมดูล ฉันชอบที่จะสามารถติดตามการพึ่งพาพร้อมกับเวอร์ชันเพื่อให้คุณสามารถย้อนกลับไปเป็นเวอร์ชันก่อนหน้าของโครงการของคุณและมีเวอร์ชันที่สอดคล้องกันของการพึ่งพาเพื่อสร้างอย่างปลอดภัยและเรียบร้อย ยิ่งไปกว่านั้นมันง่ายกว่าที่จะปล่อยไลบรารี่ของเราเป็นโครงการโอเพ่นซอร์สเนื่องจากประวัติของไลบรารี่นั้นแยกจากแอพพลิเคชั่นที่ขึ้นอยู่กับพวกมัน ฉันกำลังตั้งค่าเวิร์กโฟลว์สำหรับหลายโครงการในที่ทำงานและฉันสงสัยว่ามันจะเป็นอย่างไรถ้าเราใช้วิธีนี้แบบสุดขั้วแทนที่จะมีโครงการเสาหินเดียว ฉันรู้อย่างรวดเร็วมีความสามารถที่มีศักยภาพของเวิร์มในจริงๆโดยใช้โมดูลย่อย เผื่อว่าคู่ของการใช้งาน: studioและplayerและขึ้นอยู่กับห้องสมุดcore, graphและnetworkที่อ้างอิงมีดังนี้ core เป็นแบบสแตนด์อโลน graphขึ้นอยู่กับcore(โมดูลย่อยที่./libs/core) networkdepdends on core(โมดูลย่อยที่./libs/core) studioขึ้นอยู่กับgraphและnetwork(โมดูลย่อยที่./libs/graphและ./libs/network) playerขึ้นอยู่กับgraphและnetwork(โมดูลย่อยที่./libs/graphและ./libs/network) สมมติว่าเรากำลังใช้CMakeและแต่ละโครงการเหล่านี้มีการทดสอบหน่วยและงานทั้งหมด แต่ละโครงการ (รวมถึงstudioและplayer) จะต้องสามารถรวบรวมได้แบบสแตนด์อโลนเพื่อดำเนินการวัดรหัสการทดสอบหน่วย ฯลฯ สิ่งที่เป็นแบบเรียกซ้ำgit submodule fetchแล้วคุณจะได้รับโครงสร้างไดเรกทอรีต่อไปนี้: studio/ studio/libs/ (sub-module depth: 1) studio/libs/graph/ studio/libs/graph/libs/ (sub-module depth: 2) studio/libs/graph/libs/core/ studio/libs/network/ studio/libs/network/libs/ (sub-module depth: 2) studio/libs/network/libs/core/ ขอให้สังเกตว่าcoreถูกโคลนสองครั้งในstudioโครงการ นอกเหนือจากพื้นที่ดิสก์นี้เสียผมมีปัญหาการสร้างระบบเพราะผมกำลังสร้างcoreสองครั้งและผมอาจจะได้รับสองรุ่นต่าง ๆ coreของ คำถาม ฉันจะจัดระเบียบโมดูลย่อยเพื่อให้ได้รับการอ้างอิงเวอร์ชันและบิลด์แบบสแตนด์อโลนโดยไม่ได้รับสำเนาย่อยของโมดูลย่อยทั่วไปหลาย ๆ ชุดได้อย่างไร …
50 git  cmake  submodules 

8
การใช้ Make ถือว่าล้าสมัยหรือไม่ [ปิด]
ดังนั้นฉันจึงเจอหลายความคิดเห็น / โพสต์ / อื่น ๆ เกี่ยวกับการสร้าง makefiles โดยตรงและมันเป็นเรื่องโง่ที่ต้องทำในปี 2015 ฉันรู้เครื่องมือต่าง ๆ เช่น CMake และฉันใช้ CMake บ่อยครั้งมาก CMake กำลังสร้าง Makefile ให้คุณและช่วยในการลบความน่าเบื่อของการทำมันด้วยตัวคุณเอง แน่นอนว่ามันเพิ่มคุณสมบัติที่ยอดเยี่ยมอื่น ๆ อีกมากมาย ... แต่มันก็ยังเป็น Makefile ในที่สุด ดังนั้นคำถามของฉันคือการพูดคุย 'ล้าสมัย' เกี่ยวกับการอ้างอิงถึงยูทิลิตี้ Make ทั้งหมดหรือเพียงแค่ความคิดในการเขียน Makefiles ของคุณเองหรือไม่ ฉันไม่ได้ใช้ IDE สำหรับการพัฒนา C / C ++ เลย (แค่ emacs) ดังนั้นฉันจึงเขียน Makefiles เสมอ ถ้า Make …
31 c++  c  builds  make  cmake 

6
เหตุใด makefiles จึงควรมีเป้าหมาย“ ติดตั้ง”?
มาจากโลกของซีและซี ++ สร้างระบบส่วนใหญ่มีinstallเป้าหมายสะดุดตา Makefiles (ซึ่งจะมีการแนะนำโดย GNUตัวอย่าง) หรือCMake เป้าหมายนี้คัดลอกไฟล์รันไทม์ (ไฟล์เรียกทำงาน, ไลบรารี, ... ) ในระบบปฏิบัติการ (ตัวอย่างเช่นในC:\Program Files\บน Windows) นี่รู้สึกแฮ็คจริงๆเพราะสำหรับฉันมันไม่ใช่ความรับผิดชอบของระบบบิลด์ที่จะติดตั้งโปรแกรม (ซึ่งจริงๆแล้วเป็นความรับผิดชอบของผู้จัดการระบบปฏิบัติการ / ผู้จัดการแพ็คเกจ) นอกจากนี้ยังหมายถึงระบบการสร้างหรือสคริปต์การสร้างจะต้องรู้ว่าองค์กรของโปรแกรมที่ติดตั้งพร้อมกับตัวแปรสภาพแวดล้อมตัวแปรรีจิสทรี, symlink, สิทธิ์ ฯลฯ ที่ดีที่สุดในการสร้างระบบควรจะมีreleaseเป้าหมายที่จะส่งออกโปรแกรมที่ติดตั้ง (ตัวอย่าง.debหรือ.msi) แล้วขอให้ระบบปฏิบัติการเพื่อติดตั้งโปรแกรมที่ make uninstallนอกจากนี้ยังจะช่วยให้ผู้ใช้สามารถถอนการติดตั้งโดยไม่ต้องพิมพ์ ดังนั้นคำถามของฉัน: ทำไมระบบสร้างมักจะแนะนำให้มีinstallเป้าหมาย

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

1
การจัดระเบียบไดเรกทอรีของที่เก็บ CMake (C ++) ที่มีหลายโครงการ
ฉันต้องการคำแนะนำเกี่ยวกับองค์กรของชุดโครงการ C ++ ที่เกี่ยวข้อง แต่เป็นอิสระที่เก็บไว้ในที่เก็บ (git) เดียว โครงการใช้ CMake สำหรับตัวอย่างที่ง่ายเรานึกภาพ 2 โครงการ A และ B ขึ้นอยู่กับ B. คนส่วนใหญ่ที่พัฒนา A จะได้รับ B ผ่านระบบบรรจุภัณฑ์ ดังนั้นพวกเขาจะรวบรวมเพียง A. อย่างไรก็ตามเราควรอนุญาตให้นักพัฒนาคอมไพล์ทั้ง A และ B เอง (และติดตั้ง) แยกกันหรือรวมกัน นี่คือข้อเสนอ: └── Repo1 ├── CMakeLists.txt (1) ├── A │ ├── CMakeLists.txt (2) │ ├── include │ │ ├── aaa.h …

1
Build-In-Source และ vs. Out-Of-Source Build
ในการพัฒนาของฉัน (เป็นหลัก C ++) ฉันได้ปฏิบัติตามการใช้งานบิลด์ที่มาจากแหล่งต่าง ๆ มานาน นั่นคือที่มาของฉันมักจะนั่งอยู่ใน/project/srcไดเรกทอรีและสร้างอาศัยอยู่ใน/project/build/bin/release, /project/build/bin/debugไดเรกทอรี ฉันทำสิ่งนี้เพราะมันทำให้ไดเรกทอรีต้นทางของฉันสะอาดจากไฟล์ระดับกลางฉันมีที่เดียวสำหรับไบนารีทั้งหมดของฉันบรรจุภัณฑ์ง่ายกว่าการทำความสะอาดง่ายขึ้นและการควบคุมเวอร์ชันทำได้ง่ายขึ้น (ฉันคิดถึงอะไรเหรอ?) ฉันกำลังสืบทอดโครงการ (ขนาดใหญ่) ในขณะนี้ที่ใช้การสร้างในแหล่งที่มา แรงจูงใจสำหรับโครงสร้างประเภทนี้คืออะไรและมีข้อดีอย่างไร? (ฉันกังวลมากที่สุดกับเหตุผลระดับวิศวกรรมกับเหตุผลส่วนตัวที่ชอบ) ฉันหวังว่า "การออกแบบซอฟต์แวร์ C ++ ขนาดใหญ่ของ Lakos" จะมีน้ำหนักอยู่ในนั้น แต่ฉันก็พลาดถ้ามันทำ

2
Build automation: ปกติแล้วจะใช้ QMake สำหรับโครงการที่ไม่ใช่ Qt หรือไม่?
ดังนั้นฉันวางแผนที่จะเขียนไลบรารี C ++ และฉันต้องการให้เป็นข้ามแพลตฟอร์มและเนื่องจากไลบรารีนี้จะไม่จัดการกับ UI และฉันต้องการให้มีการพึ่งพาน้อยที่สุดเท่าที่จะทำได้ฉันจะไม่ใช้ Qt (ที่จริงแล้ว Qt จะไม่ช่วยฉันให้บรรลุสิ่งที่ฉันต้องการจริง ๆ ทั้งหมดที่ฉันวางแผนไว้คือ STL และ Boost) ตอนนี้เมื่อมันมาถึงการสร้างโครงการข้ามแพลตฟอร์มฉันชอบ QMake จริงๆเพราะมันใช้งานง่ายมากและฉันมีประสบการณ์กับมัน ฉันได้ยินสิ่งดีๆเกี่ยวกับ CMake ด้วยเช่นกัน แต่ฉันสงสัยว่าจริงๆแล้วมันใช้งานง่ายเหมือน QMake อย่างไรก็ตามนี่คือคำถามของฉัน: ฉันควรติดกับเครื่องมือสร้างอัตโนมัติที่ฉันรู้หรือ QMake ออกจากบริบทสำหรับโครงการที่ไม่ใช่ Qt หรือไม่? ฉันควรใช้โอกาสนี้ในการเรียนรู้ CMake หรือไม่ หรือมีทางเลือกที่ดีกว่าสำหรับสองคนนี้หรือไม่?
9 c++  cmake 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.