Saya mencoba CTest di CMake untuk menjalankan beberapa pengujian saya secara otomatis menggunakan make test
target. Masalahnya adalah CMake tidak "memahami" bahwa pengujian yang ingin saya jalankan harus dibuat karena ini adalah bagian dari proyek.
Jadi saya mencari cara untuk menentukan ketergantungan ini secara eksplisit.
dependencies
cmake
ctest
claf
sumber
sumber
check
target dan mereka mungkin bertabrakanSebenarnya ada cara untuk menggunakan
make test
. Anda perlu menentukan build pengujian yang dapat dieksekusi sebagai salah satu pengujian, lalu menambahkan dependensi di antara pengujian tersebut. Itu adalah:sumber
Saya menggunakan varian jawaban richq. Di tingkat atas
CMakeLists.txt
, saya menambahkan target khususbuild_and_test
,, untuk membangun dan menjalankan semua pengujian:Di berbagai
CMakeLists.txt
file sub-proyek di bawahtest/
, saya menambahkan setiap pengujian yang dapat dieksekusi sebagai ketergantunganbuild_and_test
:Dengan pendekatan ini, saya hanya perlu
make build_and_test
daripadamake test
(ataumake all test
), dan ini memiliki keuntungan hanya membangun kode pengujian (dan dependensinya). Sayang saya tidak bisa menggunakan nama targettest
. Dalam kasus saya, ini tidak terlalu buruk karena saya memiliki skrip tingkat atas yang melakukan debug dan rilis out-of-tree (dan dikompilasi silang) dengan memanggilcmake
dan kemudianmake
, dan itu diterjemahkantest
menjadibuild_and_test
.Jelas, hal-hal GTest tidak diperlukan. Saya kebetulan menggunakan / menyukai Google Test, dan ingin membagikan contoh lengkap cara menggunakannya dengan CMake / CTest. IMHO, pendekatan ini juga memiliki keuntungan karena memungkinkan saya untuk menggunakan
ctest -V
, yang menunjukkan keluaran Google Test saat pengujian berjalan:sumber
Jika Anda mencoba meniru
make check
, Anda mungkin menemukan entri wiki ini berguna:http://www.cmake.org/Wiki/CMakeEmulateMakeCheck
Saya baru saja memeriksa apakah apa yang dikatakannya berhasil (CMake 2.8.10).
sumber
make check
. Untuk tes dengan waktu kompilasi yang mendominasi, ini membuatctest -R
tidak berguna.Selamatkan diri Anda dari sakit kepala:
Berfungsi di luar kotak untuk saya dan akan membangun dependensi sebelum menjalankan pengujian. Mengingat betapa sederhananya ini, ini hampir membuat
make test
fungsionalitas asli menjadi nyaman karena memberi Anda opsi untuk menjalankan pengujian kompilasi terakhir bahkan jika kode Anda rusak.sumber
make -j4 all && make test
. Dan itu juga tidak stabil menggunakan alat non-Make build.Jika Anda menggunakan CMake> = 3.7, maka pendekatan yang disarankan adalah menggunakan perlengkapan :
Ini melakukan hal berikut:
test
target yang dapat dieksekusi yang dibangun daritest.cpp
test_build
"test" yang menjalankan Cmake untuk membangun targettest
test_build
tes sebagai tugas pengaturan perlengkapantest_fixture
test
pengujian yang hanya menjalankantest
executabletest
ujian untuk membutuhkan perlengkapantest_fixture
.Jadi, setiap kali pengujian
test
akan dijalankan, pengujian terlebih dahulu menjalankan pengujiantest_build
, yang membangun executable yang diperlukan.sumber
$<CONFIG>
tidak disetel,--target
akan menjadi argumen untuk--config
.$<CONFIG>
selalu tidak kosong. Ini adalah ekspresi generator untuk nama konfigurasi: cmake.org/cmake/help/latest/manual/… Saya akan mengedit jawaban untuk membungkusnya dalam tanda kutip hanya karena tidak ada bedanya.cmake
? Saya lakukan cara ini:mkdir build; cd build; cmake ..; make
. Dan sepertinya tidak ada default apa pun dan semua variabel terkait kosong, hinggaCMAKE_BUILD_TYPE
disetel secara manual. (saat ini di Debian 10, tidak memeriksa platform lain)Inilah yang saya pecahkan dan gunakan:
YMMV
sumber
Jawaban Derrick, disederhanakan dan dikomentari:
Ini tidak sepenuhnya benar, karena tidak menyelesaikan masalah konkurensi saat berjalan
ninja all test
, jika ada yang melakukannya. Sebaliknya, karena sekarang, Anda memiliki dua proses ninja.(Ftr, saya juga membagikan solusi ini di sini .)
sumber
Semua jawaban di atas sempurna. Tetapi sebenarnya CMake menggunakan CTest sebagai alat pengujiannya, jadi metode standar (menurut saya) untuk melakukan misi adalah:
Kemudian jalankan cmake dan buatlah untuk membangun target. Setelah itu, Anda dapat menjalankan uji make , atau hanya menjalankan
kamu akan mendapatkan hasilnya. Ini diuji di bawah CMake 2.8.
Periksa detailnya di: http://cmake.org/Wiki/CMake/Testing_With_CTest#Simple_Testing
sumber
enable_testing()
,add_test()
, dll Masalahnya adalah bahwa ia harus secara manual mengeluarkan membangun perintah sebelum menjalankan tes. Dia inginmake test
targetnya secara otomatis membuat pengujian yang dapat dieksekusi jika diperlukan.Semua jawaban bagus, tetapi menyiratkan pelanggaran tradisi untuk menjalankan tes demi perintah
make test
. Saya telah melakukan trik ini:Ini berarti bahwa pengujian terdiri dari pembuatan (opsional) dan menjalankan target yang dapat dieksekusi.
sumber
make
dan kehilangan fitur CMake dalam membuat skrip untuk alat build lainnya.