Tim kami mengalami musim panas yang sangat sibuk, yang hasilnya akan segera kami bagikan hari ini. Jadi, sambutlah rilis baru CLion 2020.2!
Secara singkat tentang apa yang termasuk dalam versi baru :
- Dukungan model desain Makefile.
- Pembaruan terbaru di CMake.
- C++20:
explicit(bool), (designated initializers),for. - : (dangling pointers), , , , .
- -: doctest, Catch2 Google Test. .
- PlatformIO .
- .
- .
- .
Makefile
Setelah menandai ulang tahun kelima CLion musim semi ini , kami segera terlibat dalam penyelesaian aktif dari fitur yang paling diantisipasi dalam IDE - dukungan untuk proyek-proyek berdasarkan Makefile. Sebelumnya, kami hanya memiliki prototipe mentah, yang kami berikan kepada pengguna kami yang paling berani untuk dicoba secara pribadi. Berkat mereka, kami dapat menguji prototipe tersebut pada berbagai pilihan proyek Makefile, memperbaiki banyak masalah di dalamnya, dan memahami batasan solusi kami saat ini (semoga sementara). Tujuan kami adalah memungkinkan pengguna untuk bekerja dengan proyek Makefile di CLion dengan semua fitur IDE cerdas seperti navigasi, pemfaktoran ulang, analisis kode statis, dan banyak lagi.
Pendekatan saat ini secara singkat terlihat seperti ini: CLion menjalankan perintah
makepada proyek Anda dengan opsi tambahan--just-printuntuk menghemat waktu pada perakitan sebenarnya. Jika CLion berhasil mengurai keluaran perintah, maka proyek akan terbuka dan semuanya berfungsi!
Mari segera buat reservasi bahwa pengerjaan dukungan Makefile di CLion masih jauh dari selesai - masih banyak keterbatasan dan ketidaksempurnaan yang diketahui. Yang paling terkenal:
- Proyek yang menggunakan libtool ( CPP-19549 ), distcc dan ccache ( CPP-19305 ), dan pembungkus lain yang "menyembunyikan" tanda kompilasi dari keluaran atau mengganggu keluaran perintah tidak didukung
make. - CLion belum dapat menangani keluaran Makes non-GNU (misalnya NMake, BSD) ( CPP-18723 ).
- Itu tidak mendukung proyek yang menonaktifkan daftar nama direktori selama proses pembangunan, sehingga CLion tidak dapat menentukan file mana yang spesifik untuk perintah build mana.
Tetapi bahkan solusi saat ini sudah memungkinkan Anda untuk membuka kernel Linux atau kode server database PostgreSQL di CLion. Jika Anda tertarik, maka daftar proyek saat ini di mana prototipe kami bekerja (serta beberapa proyek yang tidak berfungsi, dengan masalah yang ditunjukkan) dapat ditemukan di halaman ini .
Sangat mudah untuk mencoba proyek Anda:
- Siapkan proyek untuk mendapatkan Makefile untuknya (misalnya, dalam banyak kasus Anda perlu memulainya
./configure, karena CLion sendiri belum tahu bagaimana melakukan ini). - Buka proyek dengan File | Buka dan tentukan direktori yang berisi Makefile proyek utama atau langsung file ini sendiri. Konfirmasikan bahwa Anda ingin membuka sebagai proyek.
- CLion , Clean. ,
make, . - , , ! Build.
Keluarannya mungkin berisi beberapa peringatan, tetapi jika unduhan berhasil diselesaikan secara keseluruhan (harus ada tanda hijau di sebelah tugas pertama), maka Anda dapat bekerja dengan proyek di CLion.
Pengaturan argumen perintah boot, toolchain yang digunakan untuk boot, dan opsi lainnya dapat ditemukan di Pengaturan / Preferensi | Bangun, Eksekusi, Penerapan | Makefile:
Untuk menjalankan dan men-debug aplikasi Makefile, Anda perlu membuat konfigurasi Aplikasi Makefile tambahan. Dalam hal ini, target dapat dipilih dari daftar drop-down - CLion akan memberi tahu Anda opsi apa saja yang ada:
Di blog kami dalam bahasa Inggris, Anda dapat menemukan informasi lebih lanjut tentang bekerja dengan proyek Makefile di CLion. Kami juga merekomendasikan menonton demo singkat (dalam bahasa Inggris):
Pembaruan terbaru di CMake
Seperti yang diperlihatkan statistik , tiga model desain paling populer sekarang di antara pengembang C ++ adalah CMake, msbuild, dan Makefile. Dan CMake-lah yang telah memimpin peringkat ini selama tiga tahun dan terus berkembang. Oleh karena itu, kami terus memperbarui versi CMake yang dilarang di CLion dan bekerja untuk mendukung inovasi terbaru di CMake itu sendiri. Kali ini kami memperbarui versinya menjadi 3.17 dan karenanya menambahkan dukungan untuk dua fitur CMake baru yang berguna:
- Ninja Multi-Config ( Debug Release) Ninja (
-G "Ninja Multi-Config"). CLion , CMake . UI, . - Header CMake yang telah dikompilasi layak mendapatkan perhatian lebih. Secara umum, gagasan file header yang dikompilasi (PCH) bukanlah hal baru dan telah didukung oleh kompiler sejak lama. CLion juga telah menggunakan PCH selama beberapa waktu. Sekarang Anda tidak perlu mengingat flag compiler untuk PCH dan meneruskannya ke CMake ke setiap compiler tertentu dengan cara Anda sendiri, tetapi cukup tambahkan file header ke variabel target PCH melalui perintah
target_precompile_headers. CLion 2020.2 sekarang dapat bekerja dengan ini:

Yang juga patut diperhatikan adalah kemampuan untuk membuka proyek CMake di CLion dari direktori dengan hasil pembuatan CMake, sekarang tidak hanya untuk generator Makefile, tetapi untuk yang lainnya! Hemat waktu - buka proyek yang sudah dibangun di CLion tanpa memulai ulang perintah CMake pada proyek tersebut.
C ++ 20
Tahukah Anda bahwa menurut data kami , tahun ini sudah 12% developer C ++ menggunakan standar C ++ 20 ?! Oleh karena itu, kami, tentu saja, secara aktif bekerja untuk mendukung fitur-fitur baru di CLion. Tapi pertama-tama mari kita ingat apa yang kita miliki dengan mesin bahasa di CLion.
Jadi, saat ini ada dua di antaranya - yang built-in berbasis Java / Kotlin dan yang cukup baru berdasarkan Clangd, masing-masing, di C ++ (kami menggunakan CLion untuk mengembangkannya). Semua upaya sekarang sedang dimasukkan ke dalam mesin berbasis Clangd. Sepertinya prospek yang bagus, meskipun tindakan pada keseluruhan proyek (seperti pemfaktoran ulang) belum dapat dilakukan - di sini bahkan mesin berbasis Java yang tidak sempurna dan terkadang lambat menang karena pengoptimalan tertentu dan resolusi yang ditangguhkan, dan, tentu saja, karena adanya cache simbol yang dibutuhkan untuk refactorings.
Tetapi Clangd memiliki satu nilai tambah yang sangat besar - seluruh komunitas bekerja di sana untuk mendukung standar C ++ terbaru di Clang, karena proyek tersebut terbuka. Ini, tentu saja, tidak berarti bahwa kita tidak perlu melakukan apa pun - dukungan ini masih perlu disesuaikan dengan kebutuhan CLion. Tetapi ini sudah lebih mudah daripada menulis dukungan untuk fitur C ++ dari awal! Dan berdasarkan dukungan di Clang, Anda dapat menulis analisis spesifik Anda sendiri atau melakukan beberapa fitur khusus (misalnya, kami melakukan pelengkapan otomatis untuk Konsep beberapa rilis yang lalu).
Kami memastikan bahwa pembaruan terbaru untuk mesin Clangd, yang disertakan dengan LLVM, berperilaku lebih stabil dalam kode C ++ 20, dan secara umum, menurut statistik bawaan kami, mesin Clangd menjadi lebih stabil. Oleh karena itu, kemampuan untuk menonaktifkan mesin Clangd sepenuhnya telah dihapus dari pengaturan. Tetapi ditambahkan ke Pengaturan / Preferensi | Bahasa & Kerangka | C / C ++ | Informasi clangd tentang revisi yang digunakan mesin kami. Sekarang Anda tahu apa yang diharapkan darinya dalam hal dukungan C ++ dan analisis Clang-Tidy bawaan:
Omong-omong, bantuan online kami memiliki artikel yang sangat bagus dengan analisis komparatif dari dua mesin dalam hal mendukung fitur C ++.
Dan sekarang tentang apa yang sebenarnya ditambahkan dari dukungan C ++ 20:
- Penyelesaian kode untuk C ++ 20 kata kunci:
char8_t,consteval, danconstinit,co_await,co_return, danco_yield. - Penyelesaian bidang dari kelas dasar di penginisialisasi yang ditunjuk:

- Konstruksi
explicit(bool)sekarang disorot dengan benar, petunjuk nama, navigasi, dan pemfaktoran ulang berfungsi di dalamnya:

- Untuk loop
forberbasis rentang dengan penginisialisasi, refactoring Ubah nama untuk variabel loop berfungsi.
Penganalisis kode statis
Dalam rilis terakhir, kami mentransfer analisis kami yang paling "berat" - Analisis Aliran Data - ke mesin berbasis Clangd. Ini terutama untuk meningkatkan kinerja. Namun, seperti yang sering terjadi, selama refactoring, banyak ditemukan masalah dan ketidakakuratan. Jadi pada rilis 2020.2, kami terus meningkatkan analisis ini dan memperbaiki bug di dalamnya:
- , , .
- DFA Simplify code Loop condition is never updated. , :
, :
- , . , Clang-Tidy (clang-tidy:bugprone-infinite-loop), - . CLion :

- CLion (dangling pointers)! (, ), :

- , Concepts C++20, -
auto, :

Dalam rilis ini, Inspection Hector favorit semua orang (yang beberapa pengguna kami coba dengan sia-sia untuk diolok-olok ) telah berubah menjadi Widget Inspeksi baru yang terletak di sudut kanan atas area editor. Sekarang di sanalah opsi untuk mengatur tingkat lampu latar berada (dari menampilkan semua masalah hingga menonaktifkan sepenuhnya penganalisis kode), dan ketika Anda mengklik, jendela hasil analisis statis untuk file ini terbuka:
Pengujian unit
Penelitian yang telah disebutkan di sini lebih dari sekali menunjukkan bahwa 34% pengembang C ++ tidak menulis pengujian unit apa pun . Saya ingin percaya bahwa sebagai gantinya mereka melakukan pengujian dengan cara lain. Sebagian dari masalahnya adalah C ++ tidak memiliki model desain standar atau manajer ketergantungan standar, yang berarti menambahkan kerangka kerja pengujian unit ke proyek Anda tidaklah mudah. Tapi sekarang yang disebut kerangka kerja hanya-header menjadi sangat populer, yang mudah dihubungkan ke proyek Anda - tambahkan file header dan tulis pengujian sendiri. Untuk bagian kami, dalam IDE kami mencoba mendukung opsi sebanyak mungkin. Dalam rilis ini, doctest telah ditambahkan ke set dari Google Test, Catch, Boost.Test. Ngomong-ngomong, kami memiliki entri blog tamu beberapa waktu laludari penulisnya, di mana Viktor berbicara tentang keunggulan framework ini.
Dukungan CLion mencakup hal-hal biasa:
- Deteksi tes otomatis.
- Pembuatan konfigurasi otomatis untuk menjalankan dan debugging tes.
- Keluaran hasil pengujian dalam jendela bawaan khusus dengan berbagai opsi pemfilteran dan pengurutan, serta dengan transisi ke kode sumber pengujian dalam satu klik.
- Ikon di editor, di panel kiri, untuk menjalankan pengujian dan mengidentifikasi status pengujian yang terakhir dijalankan.
Google Test dan dukungan Catch2 juga telah diperbarui:
- Dukungan untuk pengujian template telah ditambahkan untuk Catch2.
- Dan untuk Google Test, dukungan untuk makro
GTEST_SKIP(), yang bisa sangat berguna jika Anda ingin melewatkan beberapa pengujian, misalnya, di lingkungan tertentu.
Video ikhtisar kecil tentang peningkatan dalam dukungan pengujian unit dari pengacara kami (omong-omong, penulis kerangka kerja Catch / Catch2):
Peringatkan pertanyaan Anda tentang CTest: membuatnya sedikit lebih sulit, karena ini bukan kerangka "biasa", tetapi tingkat abstraksi tertentu untuk menjalankan apa pun dalam bentuk pengujian. Tetapi kami merencanakan beberapa integrasi paling awal tahun 2020.3!
Dan
Yang paling menarik, mungkin, dibahas, sekarang secara singkat tentang sisanya. Saya seharusnya mulai dengan ini, tetapi CLion 2020.2 menyertakan banyak peningkatan kecil namun penting untuk kinerja editor dan perbaikan hang editor. Salah satu peningkatan tersebut, misalnya, adalah penyisipan garis miring terbalik saat ditekan
Enter di dalam definisi makro . Sepertinya ini membantu produktivitas editor? Faktanya adalah bahwa kemungkinan besar baris baru adalah bagian dari definisi makro saat ini, dan menyisipkan garis miring terbalik memungkinkan Anda untuk menghindari penguraian ulang yang tidak perlu dari sekelompok kode, dan karenanya menjadi rem editor.
Selain:
- PlatformIO — ,
platformio.iniCMake . - , IntelliJ . : GitHub Pull Requests Git WSL2 ( WSL2, CLion Git ).
- Dalam hal debugger pada tahun 2020.2, kami berhasil melakukan kurang dari yang direncanakan. Pada dasarnya, semua tugas besar telah didorong kembali ke 2020.3 (debugging sebagai root, debugging core dumps). Tetapi dalam versi ini kami telah meningkatkan versi GDB yang dilarang menjadi 9.2 dan juga memperbarui printer cantik GDB STL. Banyak peningkatan, baik fungsional, kinerja, dan stabilitas, telah dibuat di debugger berbasis LLDB kami untuk toolchain Microsoft Visual C ++.
Sekian untuk hari ini. Sudahkah Anda membaca sampai akhir? Terima kasih banyak atas perhatiannya! Cobalah , tulis pertanyaan, saran, seru di komentar - kami selalu senang membaca dan menjawabnya!
CLion Team
Drive untuk Mengembangkan