
Pendahuluan
Artikel ini menceritakan tentang pengujian dan program pengemasan menggunakan CMake, satu set utilitas yang fleksibel dan serbaguna untuk mengembangkan berbagai produk perangkat lunak. Sangat disarankan agar Anda membaca bagian pertama dan kedua dari manual ini untuk menghindari kesalahpahaman pada sintaks dan bagaimana CMake bekerja.
Peluncuran CMake
Berikut ini adalah contoh penggunaan bahasa CMake yang harus Anda praktikkan. Eksperimen dengan kode sumber dengan memodifikasi perintah yang ada dan menambahkan yang baru. Untuk menjalankan contoh-contoh ini, instal CMake dari situs web resmi .
Contoh uji
Seperti disebutkan sebelumnya, CMake mendukung pengujian otomatis program. Fitur ini sangat mudah digunakan - cukup tulis beberapa perintah di CMakeLists.txt
biasa, lalu jalankan tes menggunakan ctest
atau make test
. Yang Anda inginkan ada cek output program, analisis memori dinamis dan banyak lagi.
Kami akan mempertimbangkan proses pengujian program dengan contoh spesifik. File sumber Multiply.c
berisi kode berikut:
#include <stdio.h> #include <stdlib.h> #define ARG_COUNT 3 int main(const int argc, const char *argv[]) { if (argc != ARG_COUNT) { fprintf(stderr, "Error!\n"); return EXIT_FAILURE; } const int first = atoi(argv[1]); const int second = atoi(argv[2]); printf("The result is: %d\n", first * second); return EXIT_SUCCESS; }
Kode ini menampilkan hasil dari mengalikan dua argumen ke konsol. Harap dicatat bahwa situasi terjadinya kesalahan juga dimungkinkan jika jumlah argumen aktual tidak memenuhi yang diharapkan: dalam hal ini, Kesalahan akan dihasilkan ke aliran kesalahan Error!
.
Dalam direktori yang sama adalah file CMakeLists.txt
dengan deskripsi proses build, yang berisi kode di bawah ini:
cmake_minimum_required(VERSION 3.0) project(MyProgram) add_executable(Multiply Multiply.c) set(MULTIPLY_TIMEOUT 1)
Mari kita pertimbangkan segalanya secara berurutan. Empat perintah pertama harus familier bagi Anda dari artikel sebelumnya , dan perintah enable_testing
berikutnya menimbulkan sejumlah pertanyaan. Intinya, perintah ini hanya memberi tahu CMake tentang niat Anda untuk menguji program, secara bersamaan menghasilkan beberapa file konfigurasi, yang keberadaannya tidak perlu Anda ketahui.
Tiga add_test
berikut menambah tes ke proyek saat ini. Bentuk pendek dari perintah ini mengambil nama tes sebagai argumen pertama, dan argumen berikutnya membentuk perintah shell untuk menjalankan tes.
Serangkaian perintah set_tests_properties
menetapkan perilaku pengujian individual. Setelah daftar item pengujian, PROPERTIES
kata kunci berikut, menandakan awal daftar properti yang memiliki bentuk < > < >
dan ditetapkan untuk tes yang dipilih. Daftar lengkap properti yang tersedia ada di sini .
Untuk semua tes, waktu eksekusi maksimum diatur ke satu detik dengan properti TIMEOUT
, dan kemudian untuk tes berikutnya output yang diharapkan diatur dengan properti PASS_REGULAR_EXPRESSION
dan FAIL_REGULAR_EXPRESSION
(misalnya, jika pertandingan dengan The result is: 3105
reguler The result is: 3105
terjadi, kemudian tes FirstTest
berlanjut, dan jika cocok) dengan ekspresi Error!
tes berhenti dan dianggap gagal).
Cara mengaktifkan pengujian
Ada analog dari enable_testing
- ini adalah penyertaan modul CTest
melalui perintah include
. Secara umum, penyertaan modul lebih universal, tetapi masih ada perbedaan di antara mereka.
Perintah enable_testing
memungkinkan pengujian untuk direktori saat ini, serta untuk semua yang berikutnya. Itu harus terletak di root CMakeLists.txt
, karena CTest mengharapkan file uji di root majelis.
Mengaktifkan modul CTest
mengkonfigurasi proyek untuk pengujian menggunakan CTest / CDash, dan juga secara otomatis menentukan opsi BUILD_TESTING
, yang menerima true ketika pengujian dimungkinkan (defaultnya adalah ON
). Jadi, ketika menggunakan perintah ini, masuk akal untuk menggambarkan proses pengujian dengan cara ini:
if(BUILD_TESTING) add_test(FirstTest Test 1) add_test(SecondTest Test 2) add_test(ThirdTest Test 3)
Eksekusi uji
Serangkaian perintah cmake . && cmake --build . && ctest .
cmake . && cmake --build . && ctest .
ketiga tes dijalankan. Perintah ctest -R <RegularExpression>
mengeksekusi serangkaian tes yang memenuhi ekspresi reguler yang diberikan. Sebagai contoh, perintah ctest -R ThirdTest
hanya menjalankan tes ketiga.
Contoh pengemasan
Untuk membuat paket file sumber, pustaka dan file yang dapat dieksekusi, Anda hanya perlu menjelaskan instalasi file yang diperlukan menggunakan perintah install
, dan kemudian aktifkan modul CPack
perintah include
:
Dalam hal ini, perintah install
memberitahukan generator paket dari direktori instalasi target Multiply
. Tanpa menulis perintah instalasi, pembuatan paket tidak dimungkinkan.
Berikut ini daftar karakteristik paket dengan menetapkan beberapa variabel. Bahkan, ada banyak variabel seperti itu yang benar paket paket. Kebanyakan dari mereka adalah opsional, tetapi beberapa generator paket memerlukan definisi mereka. Daftar variabel yang umum untuk semua generator paket tersedia di sini .
Definisi variabel CPACK_GENERATOR
- ini adalah daftar generator paket yang dipanggil oleh utilitas cpack
. Dalam hal ini, dibutuhkan nilai DEB
, oleh karena itu, paket debian dihasilkan di direktori root aplikasi ikhtisar.
Akhirnya, modul CPack
, mengkonfigurasi paket proyek masa depan menggunakan variabel yang ditentukan sebelumnya dan perintah instalasi untuk file yang dapat dieksekusi, serta menambahkan dua target rakitan - package
dan package_source
(rakitan biner dan rakitan sumber, masing-masing).
Eksekusi Pengepakan
Serangkaian perintah cmake . && cmake --build . && cmake --build . --target package
cmake . && cmake --build . && cmake --build . --target package
cmake . && cmake --build . && cmake --build . --target package
diluncurkan untuk menjalankan generator yang dipilih untuk membuat paket biner, dan perintah cmake . && cmake --build . && cmake --build . --target package_source
cmake . && cmake --build . && cmake --build . --target package_source
cmake . && cmake --build . && cmake --build . --target package_source
menghasilkan paket sumber tepat di direktori root.
Penyelesaian
Pada titik ini, seri tutorial lengkap CMake telah berakhir. Saya harap Anda telah mempelajari banyak materi berguna, serta meningkatkan keterampilan pemrograman Anda. Semoga beruntung