Sibil & Inhinyeriyang Pampasabog
Paglikha ng Sistema ng Paggawa ng Krus-platanyo Para sa mga Proyektong Panlipunan na Ginagamitan ng Cmake
Table of Contents
Ang pagtatayo ng mga aplikasyong C na nag-aakma at tumatakbo nang maayos sa ibayo ng Windows, macOS, at Linux ay nangangailangan ng higit pa sa portable source code ⁇ it ay nangangailangan ng isang sistema ng pagtatayo na nag-aangkop sa mga katutubong kasangkapan ng bawat plataporma. CMake, isang open-source na sistemang generator, naresolba ito sa pamamagitan ng pagpapasya sa iyong proyekto minsan sa isang payak na configuration file at pagkatapos ay gumagawa ng mga platform-speciflux building files (Makefiles, mga network ng pag-s, mga proyektong pang-scode, atbpppppppppppp. Ang artikulong ito ay nagbibigay ng praktikal na gabay upang makagawa ng isang praktikal na cross-platform system na mga proyektong pang-poince na may mga pangunahing mga proyektong pang-poince na may mga transporma, na may mga stainment upang makagawa ng mga stance na may mga stance, na may mga stainment na may mga stainment, mga ad upang makagawa ng mga pangunahing mga proyektong pang-
Ano ang Ginagawa?
Ang Cmake ay isang meta-build system: hindi ito direktang nag-iipon ng code ngunit gumagawa ng mga input file para sa ibang mga sistema ng pagtatayo.Inilarawan mo ang iyong proyekto sa files gamit ang isang domain-specific language.[kailangan ng sanggunian] Ang Cmake pagkatapos ay basahin ang mga file na ito at outputs ang angkop na mga instruksiyon sa pagtatayo ng target na plataporma.
Kabilang sa mga pangunahing katangian ng Cmake ang:
- Ang Platform-agnostic confix: Ang parehong ay gumagana sa Unix, Windows, at maco.
- Mga generator ng moltiple: Mga Pakikipagtulungang Make, Ninja, Visual Studio, Xcode, at iba pa.
- Nagtatayo ang Out-of-source: Ang mga panatili ay gumagawa ng mga artifact na hiwalay sa source code.
- [[Talaksan: Ang mga module, gawain, at macros ay nagpapahintulot ng muling matrikula na pagbuo ng lohika.
- Ang tuklas ng package: ay tumuturing sa mga naka-install na aklatan at mga header.
- Integration na may CI/CD: Workslylyly in onected pipelines.
Ang Cmake ay naging de facto na pamantayan para sa cross-platform development sa C at C++ ecosystem, na ginagamit ng mga proyekto na iba-iba tulad ng LLVM, MySQL, at ang buong KDE desktop environment.
Mga Pakinabang ng Paggamit ng Cread para sa Pag-unlad ng Cross-Platform
Ang pag - ampon sa Cmake ay nagdudulot ng ilang tiyak na mga bentaha na hindi madaling makuha:
- [[[[T: Isulat minsan ang lohika at lumikha ng mga files para sa bawat plataporma, na inaalis ang mga marupok na shell script o platform-specific Makefiles.
- Ang pagsasanib-ugnayan ng IDE: Ang mga Team ay maaaring gumana sa Visual Studio, CLion, Xcode, o VS Code habang kabahagi ang parehong .
- Modular na proyektong istraktura: Gamitin upang hatiin ang malalaking proyekto sa mga bahaging pangmasa na may sariling dependensiya.
- Conditional logic: Pahiran ng plataporma-specific na mga bandila, source files, o aklatan lamang kung kinakailangan, nang hindi kinokopya ang buong mga configuration.
- Automated dependency handling: at Pinasimple gamit ang ikatlong-partido na mga aklatan.
- Ang pag-iinteresyo at pag-e - impake: CTest at CPack ay mahigpit na integrated, ginagawa itong maliit upang magdagdag ng mga pagsusulit at lumikha ng mga installer.
- Ang performance performance na ginagawa: Ang Ninja generator na sinamahan ng CCach ay nakakabawas ng malaking reunion ng mga panahon.
- Activative community: Opisyal na dokumentasyon at isang umuunlad na ekosistema ng mga module at mga tornial.
Pagsisimula: Pagtatakda ng Proyektong C
Ang bahaging ito ay naglalakad sa kumpletong workstrop mula sa instalasyon tungo sa isang tinipong estruktura na maaaring gamitin sa tatlong pangunahing plataporma.
1. Iluklok ang Cmake
Ibangbay ang pinakabagong binaryo mula [cmake.org o gamitin ang manedyer ng pakete ng inyong sistema:
- Linux (Debian/Ubuntu): ]
- macOS (Homebrew):
- Mga [[T: Tumatakbo sa installer at tinitiyak ang ⁇ Addd ⁇ d ⁇ d ⁇ d ⁇ d ⁇ d ⁇ d ⁇ d ⁇ d] Ang system na PaTH ⁇ i ⁇ ay pinili.
Irekomenda ang installation na may . Version 3.10 o mas mataas pa para sa mga tampok na tinatalakay rito.
2. Sumulat ng Minimal C MakeList.txt
Gumawa ng talaksang may pangalan sa iyong project root. Sa ibaba ay may isang maliit na halimbawa para sa isang proyektong pang-isahan-oras:
cmake_minimum_required(VERSION 3.10)
project(HelloWorld C)
add_executable(hello main.c)
Pagkawasak:
- ay nagtatakda ng minimum na Cmake version.Ito rin ay nakapagbibigay ng mga adaptasyon sa patakaran na nagpapabuti sa pag-uugali.
- Binigyang kahulugan ang pangalan at wika ng proyekto.Ang pag-iisyu ay pumipigil sa Cmake sa pagsuri para sa C+++ mga tagatipon.
- [[kailangan ng sanggunian] na dapat itayo ang target mula .
Ang isang medyo makatotohanang halimbawa ay nagdaragdag ng mga bandilang pang-ipon at isang header-lamang dependensiya:
cmake_minimum_required(VERSION 3.15)
project(Calculator C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)
add_executable(calc main.c parser.c)
target_include_directories(calc PRIVATE include)
Dito ay nagdaragdag sa earder search path ng tagatipon para lamang sa target .
3. Magtayo ng mga Bisa
Gumawa ng isang building directory at patakbuhin ang Cmake:
mkdir build
cd build
cmake ..
Sa Linux/macoS ito ay lumilikha ng Makefile sa pamamagitan ng default. Sa Windows na may Visual Studio na naka-install, ito ay lumilikha ng isang file. Upang humiling ng ibang generator, gamitin .
Pagkatapos ng henerasyon, puwede kang makapasa ng opsyon sa panahon ng pagsasaayos:
cmake .. -DCMAKE_BUILD_TYPE=Release -DMY_FEATURE=ON
Ang mga variable na ito ay iniimbak sa at muling ginagamit sa mga kasunod na run.
4. Gawin ang Proyekto
Minsang makagawa ng mga talaksan, magtipon:
- Make/Ninja: (mga gawain sa lahat ng plataporma at generator)
- [[Visual Studio: ]
- Xcode:
Ang utos ay cross-platform at iniiwasan ang platform-specific inchings. Gamitin upang pabilisin ang mga pagtatayo.
Patiunang mga Pamamaraan Para sa Tunay-Pandaigdig na mga Proyekto
Sa kabila ng mga pangunahing katangian, ang CMake ay nag-aalok ng mga tampok na mas malaki o mas komplikadong mga gusali.Ang pagdadalubhasa sa mga ito ay makapagtitipid ng panahon at makababawas ng mga pagkakamali.
Pag - aasikaso sa mga Dependensiya sa paghahanap ng package
Ang utos ay tumuturing sa mga naka-install na aklatan at nagtatakda ng mga variable para sa mga ito kabilang ang mga landas at file ng aklatan. Ang Modern C Make ay humihimok gamit ang [1] Na-imported targets para sa malinis na dependency propagation:
find_package(SDL2 REQUIRED)
target_link_libraries(my_app PRIVATE SDL2::SDL2)
Ang mga nai-port na target ay awtomatikong nagdadala ng mga direktoryo, mga confirm, at link flags. Kung ang aklatan ay hindi nagbibigay ng Cmake recorning files, maaaring kailanganin mo ang isang Find module. Isulat ang iyong sariling o pananalig sa mga community sa [Canle-Creader.
Para sa mga dependensiya na walang system-wide installation, ay nag-download at nag-eeeksperimento ng source code sa panahon ng pagsasaayos:
include(FetchContent)
FetchContent_Declare(
zlib
GIT_REPOSITORY https://github.com/madler/zlib.git
GIT_TAG v1.3
)
FetchContent_MakeAvailable(zlib)
target_link_libraries(my_app PRIVATE zlib)
Tinitiyak ng pamamaraang ito na ang mga bersiyon ay maaaring baguhin sa pamamagitan ng paglalagay ng mga letra.
Karagdagang mga Pagsubok sa Pamamagitan ng CTest
Mag - isip ng mga pagsubok sa pamamagitan ng CTest.
enable_testing()
add_executable(test_parser test_parser.c)
target_link_libraries(test_parser PRIVATE parser_lib)
add_test(NAME ParserTest COMMAND test_parser)
Mga pagsubok sa pagtakbo na may:
ctest --output-on-failure
Ang CTest ay sumusuporta sa mga instruksyon ng pagsusulit, mga tatak, timeout, at mga katumbas na pagpatay. Para sa mas komprehensibong pagsubok, isaalang-alang ang pagsasama sa isang unit-test frameion tulad ng cmocka sa pamamagitan ng pag-uugnay ng aklatan nito at paggamit .
Krus-Kompilasyon
Gumawa ng mga semplifies cross-compilation sa pamamagitan [toolchain files. Isang talaksang kasangkapanchain ang nagtatakda ng tagatipon, sysroot, at target na arkitektura.Liksi ang isang talaksan tulad ng :
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_SYSROOT /path/to/sysroot)
Kung gayon ay magsumamo ka sa sakbat na toolchain:
cmake -DCMAKE_TOOLCHAIN_FILE=arm-cross.cmake ..
Awtomatikong gagamitin ni C Make ang espesipikong cross-compiler at hahanapin ang sysroot para sa mga aklatan. Ang teknik na ito ay gumagana para sa mga sistemang nakapaloob, mga platapormang panggalaw, at anumang senaryo kung saan naiiba ang makinang pang-gawa mula sa puntiryang makina.Cross Compileng na may gabay na C Make para sa mga detalye.
Paglalagay at Packing
Gamitin ang mga utos na alamin kung paano dapat i-setrey ang inyong proyekto:
install(TARGETS my_app DESTINATION bin)
install(FILES config.ini DESTINATION etc)
Pagkatapos ay gumagawa ng mga installer ang CPack: DEB, RPM, NSIS, DMG, atbp. Idagdag sa dulo ng iyong :
include(CPack)
Run upang makagawa ng isang Debian pack. Ang CPack ay nagmamana ng lahat ng mga tuntunin at pinapayagan ang customization sa pamamagitan ng mga variables tulad .
Karaniwang mga Patibong at Pinakamabuting Gawain
Narito ang madalas na mga isyu at kung paano maiiwasan ang mga ito:
Paslit: Patag na mga Landas
Huwag gumamit ng mga landas na walang takdang kahulugan sa . Gamitin at kamag-anak ng punong-ugat. Para sa mga lokasyon ng talaksang runtime, gamitin upang i-embed ang mga landas o umasa sa mga reguladoryo ng instalasyon.
Patalâ: Hindi Nakikita ang mga Deserador na Kapahayagan
Ang mga ekspresyong Generator () ay sinusuri ang oras ng pagtatayo, hindi ang oras ng pagsasaayos.[kailangan ng per-configuration settings:
target_compile_definitions(my_app PRIVATE
$<$<CONFIG:Debug>:_DEBUG>
)
Ito ay nagdaragdag lamang para sa mga gusali ng Debug. Iwasan ang paggamit dahil ang mga multi-config generator (Visual Studio, Xcode) ay hindi nagtatakda ng sa oras ng pagsasaayos.
Patalâ: Labis na Paggamit sa Pangglobong mga Utos
Ang mga utos na katulad ng , , at ay umaapekto sa lahat ng mga target.[prefer target-specific commands tulad ng , , at para sa mas mainam na encapsition.
Pigtfall: Hindi Gumagamit ng Tamang Laskas para hanapin ang package
Magtakda ] [ at pagkatapos ay iugnay ang mga target nito. Huwag gamitin ang at manu-manong itakda ang mga link directories maliban na lang kung talagang kailangan.
Pagsasaayos
Binago ng CMake ang hamon ng multi-platform C development sa isang matyempirableng proseso. Sa pamamagitan ng pagsulat ng isang set ng mga instruksiyon sa pagtatayo, nagkakaroon ka ng katutubong pagganap, suporta ng ID, at matatag na pamamahala ng dependensiya sa kabila ng lahat ng mga pangunahing operating system.Simulan sa isang payak at unti-unting mag-aampon ng mga advancement, cross-compilation, standingevement roughtment standing ang iyong proyekto.Ang pamumuhunan sa pag-aaral ng Chy ay nagbabayad sa tuwing pagtatayo, pagsubok, o paglalagay sa isang plataporma na walang isang composition ng isang solong composition ng code.