การจัดระเบียบไดเรกทอรีของที่เก็บ CMake (C ++) ที่มีหลายโครงการ


12

ฉันต้องการคำแนะนำเกี่ยวกับองค์กรของชุดโครงการ C ++ ที่เกี่ยวข้อง แต่เป็นอิสระที่เก็บไว้ในที่เก็บ (git) เดียว โครงการใช้ CMake

สำหรับตัวอย่างที่ง่ายเรานึกภาพ 2 โครงการ A และ B ขึ้นอยู่กับ B. คนส่วนใหญ่ที่พัฒนา A จะได้รับ B ผ่านระบบบรรจุภัณฑ์ ดังนั้นพวกเขาจะรวบรวมเพียง A. อย่างไรก็ตามเราควรอนุญาตให้นักพัฒนาคอมไพล์ทั้ง A และ B เอง (และติดตั้ง) แยกกันหรือรวมกัน

นี่คือข้อเสนอ:

└── Repo1
    ├── CMakeLists.txt (1)
    ├── A
       ├── CMakeLists.txt (2)
       ├── include
          ├── aaa.h
          ├── aaaa.h
          └── CMakeLists.txt (3)
       └── src
           ├── aaa.cpp
           ├── aaaa.cpp
           └── CMakeLists.txt (4)
    ├── B
       ├── CMakeLists.txt (2)
       ├── include
          ├── bbb.h
          ├── bbbb.h
          └── CMakeLists.txt (3)
       └── src
           ├── bbb.cpp
           ├── bbbb.cpp
           └── CMakeLists.txt (4)
    └── test
        ├── CMakeLists.txt (5)
        └── testaaaa.cpp

(1) กำหนดตัวแปร cmake ทั่วไปสำหรับทุกโครงการ (ถ้ามี) และรวมถึงไดเรกทอรีย่อย (2) กำหนดโครงการและตัวแปร cmake ที่จำเป็นของโครงการ (3) กำหนดส่วนหัวที่จะติดตั้งและสิ่งที่จำเป็นสำหรับการรวบรวม (4) กำหนดค่าไลบรารีและไบนารี (5) กำหนดค่าไฟล์ทดสอบทดสอบและกรณีทดสอบ

ตามที่ฉันเข้าใจแล้วแต่ละโครงการควรสร้างไฟล์ XXXConfig.cmake และติดตั้งใน / usr / local / share / cmake การเขียนไฟล์เหล่านี้ดูค่อนข้างซับซ้อนเมื่ออ่านเอกสารของ CMake

คุณคิดอย่างไร ? โครงสร้างเหมาะสมหรือไม่

คุณมีตัวอย่างการทำงานของชุดโครงการดังกล่าวหรือไม่?


ฉันคิดว่าคุณอาจจะ overshooting นี่ - เราแนะนำเพียง CMake สำหรับการประยุกต์ใช้เป็นหนึ่งเดียวกับโครงการห้องสมุดหนึ่ง dependee และจนถึงขณะนี้มีความสุขกับหนึ่งCMakeLists.txtไฟล์ต่อโครงการ: A/CMakeLists.txt(แอป) รวมถึงB/CMakeLists.txt(ห้องสมุด) add_subdirectory(...)โดยใช้
ssc

คำตอบ:


12

หลังจากอ่านและทดสอบบ้างแล้วฉันได้ทำโครงการสาธิต C ++ ขั้นพื้นฐานซึ่งแสดงให้เห็นถึงการใช้งานของ CMake, CTest + boost.test, CPack และ Doxygen และใช้องค์กรที่ฉันกล่าวถึงในคำถามของฉันไม่มากก็น้อย

โครงการแสดงวิธีการอ้างอิงโครงการย่อยวิธีการรวบรวม repo ทั้งหมดหรือเฉพาะโครงการย่อยวิธีการทำแพคเกจวิธีการทดสอบและวิธีการจัดทำเอกสาร

ดูที่นี่: https://github.com/Barthelemy/CppProjectTemplate

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