ฉันกำลังพยายามทำให้ cross-plattform build system ทำงานโดยใช้ CMake ขณะนี้ซอฟต์แวร์มีการขึ้นต่อกันเล็กน้อย ฉันรวบรวมและติดตั้งในระบบของฉัน
ตัวอย่างไฟล์ที่ติดตั้งแล้ว:
-- Installing: /usr/local/share/SomeLib/SomeDir/somefile
-- Installing: /usr/local/share/SomeLib/SomeDir/someotherfile
-- Installing: /usr/local/lib/SomeLib/somesharedlibrary
-- Installing: /usr/local/lib/SomeLib/cmake/FindSomeLib.cmake
-- Installing: /usr/local/lib/SomeLib/cmake/HelperFile.cmake
ตอนนี้ CMake มีfind_package()
ที่เปิดFind*.cmake
ไฟล์และค้นหาหลังจากห้องสมุดในระบบและกำหนดตัวแปรบางอย่างเช่นSomeLib_FOUND
ฯลฯ
CMakeLists.txt ของฉันมีอะไรเช่นนี้:
set(CMAKE_MODULE_PATH "/usr/local/lib/SomeLib/cmake/;${CMAKE_MODULE_PATH}")
find_package(SomeLib REQUIRED)
คำสั่งแรกกำหนดที่ CMake ค้นหาหลังจากFind*.cmake
และฉันเพิ่มไดเรกทอรีของSomeLib
ที่FindSomeLib.cmake
สามารถพบได้จึงfind_package()
ทำงานตามที่คาดไว้
แต่นี่เป็นสิ่งที่แปลกเพราะหนึ่งในเหตุผลที่find_package()
มีอยู่คือการหลีกเลี่ยงเส้นทางที่มีการเข้ารหัสแบบไม่ข้าม - แพลตฟอร์ม
มักจะทำเช่นนี้ได้อย่างไร ฉันควรคัดลอกcmake/
ไดเรกทอรีSomeLib
ไปยังโครงการของฉันและตั้งค่าCMAKE_MODULE_PATH
ค่อนข้าง