ຈັດການການເພິ່ງພາອາໄສ (Dependencies) ຂອງ C++ ດ້ວຍ Clickable

ຖ້າແອັບຂຶ້ນກັບ library ທີ່ບໍ່ໄດ້ຕິດຕັ້ງມາກ່ອນໃນ Ubuntu Touch, ແອັບຈຳເປັນຕ້ອງໃສ່ມັນໄວ້ພາຍໃນແພັກເກດ click. ຄູ່ມືນີ້ສະແດງໃຫ້ເຫັນວ່າສິ່ງນີ້ສາມາດເຮັດໄດ້ແນວໃດດ້ວຍ Clickable.

ການສ້າງ (Building)

ບາງຄັ້ງ libraries ມີໃຫ້ໃຊ້ແບບສ້າງສຳເລັດຮູບ (pre-built), ເຊິ່ງຊ່ວຍໃຫ້ທ່ານຂ້າມຂັ້ນຕອນການ build ໄດ້. ເຖິງຢ່າງໃດກໍຕາມ, ແນະນຳໃຫ້ compile dependency ຂອງທ່ານ, ເນື່ອງຈາກມັນໃຫ້ທ່ານຄວບຄຸມຂະບວນການທັງໝົດໄດ້ຫຼາຍກວ່າ ແລະ ອາດຈະນຳໄປສູ່ຜົນລັດທີ່ດີກວ່າ (ເຊັ່ນ: ປະສິດທິພາບທີ່ດີກວ່າ ຫຼື ຂະໜາດແພັກເກດທີ່ນ້ອຍກວ່າ).

ການ Compile

ວາງຊອດໂຄ້ດຂອງ library ໄວ້ທີ່ libs/LIBNAME (ປ່ຽນ LIBNAME ດ້ວຍຊື່ຂອງ library), ເພາະວ່ານີ້ແມ່ນບ່ອນທີ່ clickable ຈະຊອກຫາມັນໂດຍຄ່າເລີ່ມຕົ້ນ. ຖ້າຊອດໂຄ້ດຂອງ dependency ມີໃຫ້ເປັນ git repository, ມັນເປັນຄວາມຄິດທີ່ດີທີ່ຈະເພີ່ມມັນເປັນ git submodule. ຖ້າບໍ່ດັ່ງນັ້ນ ໃຫ້ເພີ່ມສະຄຣິບເພື່ອດາວໂຫຼດຊອດໂຄ້ດ.

ເພີ່ມ libraries section ໃສ່ clickable.yaml ຂອງທ່ານ, ແບບນີ້:

 builder: "cmake"
 libraries:
   LIBNAME:
     builder: "cmake"

ຖ້າ library ບໍ່ມີການຕັ້ງຄ່າ CMake, ທ່ານຈຳເປັນຕ້ອງໃຊ້ຕົວສ້າງ qmake ຫຼື custom ແທນ.

ທາງເລືອກເສີມ, ຕັ້ງຄ່າການ compilation ໂດຍການເພີ່ມ build_args, ເຊິ່ງອາດຈະມີລັກສະນະແບບນີ້:

 builder: "cmake"
 libraries:
   LIBNAME:
     builder: "cmake"
     build_args:
     - "-DBUILD_EXAMPLES=OFF"
     - "-DBUILD_DOCS=OFF"
     - "-DBUILD_TESTS=OFF"
     - "-DBUILD_SHARED_LIBS=OFF"

Build arguments ສ່ວນໃຫຍ່ແມ່ນສະເພາະຂອງໂຄງການ. ດັ່ງນັ້ນ, ໃຫ້ສຶກສາຄຳແນະນຳການ build ຂອງ library ແລະ ຊອກຫາການຕັ້ງຄ່າ option ໃນ CMakeLists.txt ຂອງມັນດ້ວຍ.

ເພື່ອ build library ສຳລັບທຸກສະຖາປັດຕະຍະກຳຢ່າງແທ້ຈິງ ໃຫ້ run clickable build --libs --arch armhf, clickable build --libs --arch arm64 ແລະ clickable build --libs --arch amd64. ຢ່າລືມລະບຸຂັ້ນຕອນນີ້ໃນ README ຂອງທ່ານ, ເພື່ອໃຫ້ຄົນອື່ນສາມາດເຮັດຊ້ຳຂະບວນການ build ໄດ້.

ເບິ່ງວິທີທີ່ clickable.yaml ຂອງ Teleports ໃຊ້ຟີເຈີ libraries ເພື່ອ build dependency tdlib ຂອງມັນ.

ສ້າງສຳເລັດຮູບ (Pre-built)

ຖ້າທ່ານ compile library ຂອງທ່ານຕາມທີ່ອະທິບາຍຂ້າງເທິງ, ໃຫ້ຂ້າມຂັ້ນຕອນນີ້.

library ແບບ pre-built ປົກກະຕິແລ້ວຈະມີໃຫ້ເປັນ shared object ທີ່ຕ້ອງໄດ້ link ແບບ dynamically ເທົ່ານັ້ນ. ຍິ່ງໄປກວ່ານັ້ນ, ມັນອາດຈະມີອົງປະກອບທີ່ທ່ານບໍ່ຕ້ອງການ, ສົ່ງຜົນໃຫ້ແອັບມີຂະໜາດໃຫຍ່ເກີນໄປ. ມັນອາດຈະຂາດບາງຢ່າງທີ່ທ່ານສາມາດເຮັດໄດ້ໂດຍການ compile ດ້ວຍຕົວທ່ານເອງ. ບາງຄັ້ງ, library ມີຢູ່ໃນ Ubuntu Repositories, ແຕ່ບໍ່ສາມາດຕິດຕັ້ງໄດ້ສຳລັບສະຖາປັດຕະຍະກຳທີ່ທ່ານຕ້ອງການ (ໜ້າຈະເປັນ armhf ຫຼື arm64). ໃນກໍລະນີນີ້ ທ່ານຕ້ອງ compile library ຕາມທີ່ອະທິບາຍຂ້າງເທິງ.

ຖ້າ library ມີຢູ່ໃນ Ubuntu Repositories, ທ່ານສາມາດເພີ່ມມັນເຂົ້າໃນລາຍການ dependencies ໄດ້, ແບບນີ້:

 builder: "cmake"
 dependencies_target:
 - "libsomething-dev"

Clickable ຈະຕິດຕັ້ງແພັກເກດທີ່ລະບຸໂດຍອັດຕະໂນມັດສຳລັບສະຖາປັດຕະຍະກຳເປົ້າໝາຍພາຍໃນ build container. ຕົວຢ່າງສາມາດພົບໄດ້ໃນ clickable.json ຂອງ Guitar Tools.

ຖ້າ library ສາມາດພົບໄດ້ໃນ PPA, ທ່ານສາມາດເພີ່ມ PPA ໃສ່ clickable.yaml ໄດ້ເຊັ່ນກັນ. ຕົວຢ່າງ:

 builder: "cmake"
 dependencies_ppa:
 - "ppa:someone/libsomething"
 dependencies_target:
 - "libsomething-dev"

ຖ້າບໍ່ດັ່ງນັ້ນ ໃຫ້ເພີ່ມສະຄຣິບເພື່ອດາວໂຫຼດ pre-built library.

ການນຳໃຊ້

ທຳອິດ, ທ່ານຕ້ອງລະບຸ include directory ບ່ອນທີ່ສາມາດຊອກຫາ headers ທີ່ທ່ານລວມເຂົ້າໃນຊອດໂຄ້ດຂອງແອັບໄດ້. ທີສອງ, ທ່ານຕ້ອງ link binary ຂອງ library ເຂົ້າກັບ binary ຂອງແອັບທ່ານ.

ໃນກໍລະນີທີ່ library ມີໄຟລ໌ການຕັ້ງຄ່າ CMake, ທ່ານສາມາດໃຊ້ຄຳສັ່ງ find_package, ເຊິ່ງໃຫ້ເປົ້າໝາຍໃນການ link ຫຼື ຕົວປ່ຽນທີ່ຊີ້ໄປຫາ binary ຂອງ library ແລະ include directories. ແຖວເພີ່ມເຕີມໃນ CMakeLists.txt ຂອງທ່ານອາດຈະມີລັກສະນະຄື:

find_package(SOMELIBRARY REQUIRED)

include_directories(${SOMELIBRARY_INCLUDE_DIRS})
target_link_libraries(mytarget ${SOMELIBRARY_LIBS})

ຄຳສັ່ງ find_package ປົກກະຕິແລ້ວຈະກຳນົດເສັ້ນທາງໄປຫາ include directory ເປັນ SOMELIBRARY_INCLUDE_DIRS ແລະ binaries ຂອງ library ເປັນ SOMELIBRARY_LIBS (ກວດເບິ່ງເອກະສານຂອງ library ວ່າການຕັ້ງຄ່າ CMake ຂອງພວກເຂົາໃຫ້ຫຍັງແດ່). ໃຊ້ພວກມັນກັບຄຳສັ່ງ include_directories ແລະ target_link_libraries. ເບິ່ງ Camera Scanner ImageProcessing CMakeLists.txt ສຳລັບຕົວຢ່າງໃນໂລກຕົວຈິງ.

ມາຮອດຈຸດນີ້ ທ່ານຄວນຈະສາມາດທົດສອບກັບໂໝດ desktop ຂອງ Clickable ໄດ້ແລ້ວ ໂດຍການ run clickable desktop.

ການນຳໄປໃຊ້ (Deployment)

ຖ້າທ່ານ link library ແບບ statically, ທ່ານສາມາດຂ້າມຂັ້ນຕອນນີ້ໄດ້, ເນື່ອງຈາກ binary ຂອງ library ຢູ່ພາຍໃນ binary ຂອງແອັບທ່ານແລ້ວ.

ຊອກຫາວ່າໄຟລ໌ shared object (*.so) ໃດທີ່ທ່ານຕ້ອງໃສ່ໄປນຳ. ທ່ານສາມາດເຮັດໄດ້ໂດຍການເລີ່ມແອັບໃນອຸປະກອນຂອງທ່ານຜ່ານ clickable && clickable logs. ທ່ານຄວນຈະເຫັນຂໍ້ຄວາມຜິດພາດບອກທ່ານວ່າໄຟລ໌ shared object ໃດຂາດຫາຍໄປ.

ຊອກຫາເສັ້ນທາງໄປຫາໄຟລ໌ shared object. ສຳລັບ libraries ທີ່ build ຜ່ານ clickable, ພວກມັນຈະຕັ້ງຢູ່ບ່ອນໃດບ່ອນໜຶ່ງໃນ install dir ຂອງ library, ເຊິ່ງຕັ້ງຢູ່ພາຍໃນ build dir ຂອງ library ໂດຍຄ່າເລີ່ມຕົ້ນ (ເຊັ່ນ: build/arm-linux-gnueabihf/opencv/install). ສຳລັບ libraries ແບບ pre-built ໃຫ້ run clickable run "find / -name 'libSomething.so'" (ປ່ຽນ libSomething.so ດ້ວຍໄຟລ໌ທີ່ທ່ານກຳລັງຊອກຫາ). ສິ່ງນີ້ຄວນພິມເສັ້ນທາງໄປຫາໄຟລ໌ອອກມາ (ພ້ອມກັບຂໍ້ຄວາມຜິດພາດບາງຢ່າງທີ່ທ່ານສາມາດບໍ່ສົນໃຈໄດ້). ໂດຍທົ່ວໄປ, /usr/lib ແມ່ນບ່ອນທີ່ດີທີ່ຈະຊອກຫາໄຟລ໌ shared object.

ເພື່ອເອົາໄຟລ໌ເຂົ້າໄປໃນແພັກເກດ click, ໃຫ້ເພີ່ມຄີ install_lib ໃສ່ clickable.yaml ຂອງທ່ານ:

 builder: "cmake"
 libraries:
   LIBNAME:
     builder: "cmake"
     install_lib:
     - "$LIBNAME_LIB_INSTALL_DIR/usr/lib/$ARCH_TRIPLET/libqmapboxgl.so*"
     - "/usr/lib/$ARCH_TRIPLET/libSoundTouch.so.*"

ແຖວຂ້າງເທິງມີສອງຕົວຢ່າງ. ອັນທຳອິດຕິດຕັ້ງ library ທີ່ build ດ້ວຍ Clickable. ດາວຈໍາໃນ .so* ຊ່ວຍຈັບ symbolic links ພ້ອມກັບ library ຕົວຈິງເຊິ່ງໃຊ້ເພື່ອຊີ້ໄປຫາເວີຊັນປະຈຸບັນ.

ຂຶ້ນກັບ library, ທ່ານອາດຈະຕ້ອງໃສ່ຂໍ້ມູນເພີ່ມເຕີມບາງຢ່າງໄປນຳ. ໃນກໍລະນີນັ້ນ ໃຫ້ປຶກສາ readme ຫຼື ຄຳແນະນຳການຕິດຕັ້ງຂອງ library.

ຕອນນີ້ທ່ານຄວນຈະພ້ອມທີ່ຈະ build ແລະ ຕິດຕັ້ງແພັກເກດ click ຂອງທ່ານໃນອຸປະກອນທີ່ເຊື່ອມຕໍ່ກັບຄອມພິວເຕີຂອງທ່ານແລ້ວ ໂດຍການ run clickable.