Mengonfigurasi dan membangun dengan CMake Presets di Visual Studio
CMake mendukung dua file yang memungkinkan pengguna menentukan opsi konfigurasi, build, dan pengujian umum dan membagikannya dengan orang lain: CMakePresets.json
dan CMakeUserPresets.json
. Gunakan file-file ini untuk mendorong CMake di Visual Studio dan Visual Studio Code, dalam alur integrasi berkelanjutan (CI), dan dari baris perintah.
CMakePresets.json
adalah untuk menyimpan build di seluruh proyek. CMakeUserPresets.json
adalah bagi pengembang untuk menyimpan build lokal mereka sendiri. Kedua file didukung di Visual Studio 2019 versi 16.10 atau yang lebih baru.
Artikel ini berisi informasi tentang CMakePresets.json
integrasi dengan Visual Studio. Berikut adalah tautan bermanfaat:
- Untuk informasi selengkapnya tentang format
CMakePresets.json
, lihat dokumentasi CMake resmi. - Untuk informasi selengkapnya tentang peta vendor Microsoft dan ekspansi makro, lihat
CMakePresets.json
danCMakeUserPresets.json
peta vendor Microsoft. - Untuk informasi selengkapnya tentang cara menggunakan
CMakePresets.json
di Visual Studio Code, lihat Mengonfigurasi dan membangun dengan CMake Presets.
Kami merekomendasikan CMakePresets.json
sebagai alternatif untuk CMakeSettings.json
. Visual Studio tidak pernah membaca dari dan CMakePresets.json
CMakeSettings.json
pada saat yang sama. Untuk mengaktifkan atau menonaktifkan CMakePresets.json
integrasi di Visual Studio, lihat Mengaktifkan CMakePresets.json
di Visual Studio 2019.
CMake dan CMakePresets.json
versi yang didukung
Versi yang didukung CMakePresets.json
dan CMakeUserPresets.json
skema bergantung pada versi Visual Studio Anda:
- Visual Studio 2019 versi 16.10 dan yang lebih baru mendukung skema versi 2 dan 3.
- Visual Studio 2022 versi 17.4 pratinjau 1 menambahkan dukungan untuk skema versi 4.
- Visual Studio 2022 versi 17.5 pratinjau 1 menambahkan dukungan untuk skema versi 5.
Anda dapat memperbarui versi dengan mengubah "version"
bidang di objek akar. Untuk contoh dan informasi selengkapnya, lihat CMakePresets.json
format.
CMake versi 3.20 atau yang lebih baru diperlukan saat Anda memanggil CMake dengan CMakePresets.json
dari baris perintah. Namun, Visual Studio membaca dan mengevaluasi CMakePresets.json
serta CMakeUserPresets.json
dirinya sendiri dan tidak memanggil CMake secara langsung dengan opsi .--preset
Jadi, CMake versi 3.20 atau yang lebih baru tidak diperlukan secara ketat saat Anda membangunnya di CMakePresets.json
dalam Visual Studio.
Sebaiknya gunakan setidaknya CMake versi 3.14 atau yang lebih baru.
Mengaktifkan CMakePresets.json
integrasi di Visual Studio
CMakePresets.json
integrasi tidak diaktifkan secara default di Visual Studio. Anda dapat mengaktifkannya di Opsi>Alat>CMake>Umum:
Layar ini dicapai dari menu Visual Studio 2022: Alat > Opsi > CMake > Umum. Opsi berada di bawah bagian file konfigurasi CMake.
Penting
Tutup dan buka kembali folder di Visual Studio untuk mengaktifkan integrasi.
Di beberapa versi Visual Studio yang lebih lama, Opsi>Alat>CMake>General hanya memiliki satu opsi untuk mengaktifkan CMakePresets.json
integrasi:
Tabel berikut menunjukkan kapan CMakePresets.json
digunakan alih-alih CMakeSettings.json
untuk mendorong konfigurasi dan build CMake di Visual Studio 2022 dan Visual Studio 2019 versi 16.10 dan yang lebih baru. Jika tidak ada file konfigurasi, default Konfigurasikan Preset akan digunakan.
Dalam tabel, "Opsi Alat>diaktifkan" berarti Gunakan CMakePresets.json untuk mendorong CMake mengonfigurasi, membangun, dan menguji dipilih di Opsi>Alat>CMake>Umum.
File konfigurasi | Opsi Alat > dinonaktifkan | Opsi Alat > diaktifkan |
---|---|---|
Tidak ada file konfigurasi yang ada | CMakeSettings.json |
CMakePresets.json |
CMakeSettings.json hadiah |
CMakeSettings.json |
CMakePresets.json |
CMakePresets.json hadiah |
CMakePresets.json |
CMakePresets.json |
Kedua file konfigurasi ada | CMakePresets.json |
CMakePresets.json |
Mengubah konfigurasi otomatis dan pemberitahuan cache
Secara default, Visual Studio secara otomatis memanggil configure
setiap kali Sistem Target aktif atau Mengonfigurasi perubahan Prasetel. Anda dapat mengubah perilaku ini dengan memilih Jangan pernah menjalankan langkah konfigurasi secara otomatis di Opsi>Alat>CMake>Umum. Anda juga dapat menonaktifkan semua pemberitahuan cache CMake (bilah emas) dengan menghapus pemberitahuan Tampilkan cache CMake.
Preset Konfigurasi Default
Jika tidak ada CMakePresets.json
atau CMakeUserPresets.json
file ada, atau jika CMakePresets.json
atau CMakeUserPresets.json
tidak valid, Visual Studio akan kembali pada Default Konfigurasi Preset berikut:
Contoh Windows
{
"name": "windows-default",
"displayName": "Windows x64 Debug",
"description": "Sets Ninja generator, compilers, x64 architecture, build and install directory, debug build type",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [ "Windows" ]
}
}
},
Contoh Linux
{
"name": "linux-default",
"displayName": "Linux Debug",
"description": "Sets Ninja generator, compilers, build and install directory, debug build type",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [ "Linux" ]
},
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
}
}
}
Jika Anda mencoba membuka atau memodifikasi CMakePresets.json
file yang tidak ada, Visual Studio secara otomatis membuat CMakePresets.json
file dengan Preset Konfigurasi default di akar proyek Anda.
Mengonfigurasi dan membangun
Pada toolbar Visual Studio, ada dropdown untuk Sistem Target, Konfigurasikan Preset, dan Build Preset saat CMakePresets.json
integrasi diaktifkan:
Pilih Sistem Target
Daftar dropdown di sebelah kiri menunjukkan Sistem Target aktif. Ini adalah sistem tempat CMake dipanggil untuk mengonfigurasi dan membangun proyek. Daftar dropdown ini mencakup komputer lokal Anda, semua koneksi SSH di Pengelola Sambungan berdasarkan nama host, dan semua penginstalan Subsistem Windows untuk Linux (WSL) yang dapat ditemukan Visual Studio:
Daftar dropdown berisi beberapa entri termasuk Komputer Lokal, alamat ip 192.168.0.5, WSL: ubuntu2004, WSL: debian, dan Kelola Koneksi.
Dalam contoh sebelumnya:
- 192.168.0.5 adalah sistem Linux jarak jauh yang ditambahkan ke Pengelola Sambungan.
- ubuntu2004 dan debian adalah instalasi WSL.
Pilih Kelola Koneksi untuk membuka Pengelola Sambungan.
Pilih Prasetel Konfigurasi
Daftar dropdown di tengah menunjukkan Preset Konfigurasi aktif. Ini adalah configurePreset
nilai yang digunakan saat CMake dipanggil untuk menghasilkan sistem build proyek. Daftar dropdown ini mencakup penyatuan Preset Konfigurasi yang tidak tersembunyi yang ditentukan dalam CMakePresets.json
dan CMakeUserPresets.json
.
Visual Studio menggunakan nilai hostOS
di peta vendor Pengaturan Microsoft Visual Studio untuk menyembunyikan KonfigurasiKan Preset yang tidak berlaku untuk Sistem Target aktif. Untuk informasi selengkapnya, lihat entri untuk hostOS
dalam tabel di bawah peta vendor Pengaturan Visual Studio.
Pilih Kelola Konfigurasi untuk membuka file yang CMakePresets.json
terletak di akar proyek. CMakePresets.json
dibuat jika belum ada.
Pilih Build Preset
Daftar dropdown di sebelah kanan menunjukkan Preset Build aktif. Ini adalah buildPreset
nilai yang digunakan saat CMake dipanggil untuk membangun proyek. Daftar dropdown ini mencakup penyatuan Preset Build yang tidak tersembunyi yang ditentukan dalam CMakePresets.json
dan CMakeUserPresets.json
.
Semua Preset Build diperlukan untuk menentukan nilai terkait configurePreset
. Visual Studio menyembunyikan Preset Build yang tidak berlaku untuk Preset Konfigurasi aktif. Untuk informasi selengkapnya, lihat daftar Build Presets.
Jika tidak ada Preset Build yang terkait dengan Preset Konfigurasi aktif, Visual Studio mencantumkan Build Preset default. Preset Build default setara dengan meneruskan cmake --build
tanpa argumen lain dari baris perintah.
Konfigurasikan
Visual Studio secara otomatis mencoba mengonfigurasi proyek saat mendeteksi bahwa cache CMake sudah kedaluarsa. Untuk memanggil konfigurasi secara manual, pilih Project>Configure <project-name> dari menu utama. Ini sama dengan berjalan cmake --preset <configurePreset>
dari baris perintah, di mana <configurePreset>
adalah nama Preset Konfigurasi aktif.
Untuk menonaktifkan pembuatan cache otomatis, lihat Konfigurasi otomatis dan pemberitahuan cache.
Build
Untuk membangun seluruh proyek, pilih Build>All dari menu utama. Ini sama dengan berjalan cmake --build --preset <buildPreset>
dari baris perintah, di mana <buildPreset>
adalah nama Preset Build aktif.
Untuk membuat satu target, beralihlah ke Tampilan Target CMake di Penjelajah Solusi. Kemudian klik kanan target apa pun dan pilih Bangun dari menu pintasan.
Catatan
Visual Studio 2019 tidak mendukung buildPresets.targets
opsi untuk membangun subset target yang ditentukan dalam CMakePresets.json
.
Jalankan CTest
CMakePresets.json
mendukung dua opsi menu di Visual Studio 2019:
- Uji>Jalankan CTests untuk <nama> proyek memanggil CTest dan menjalankan semua pengujian yang terkait dengan Preset Konfigurasi dan Build Preset aktif, tanpa argumen lain yang diteruskan ke CTest.
- Uji>Coba Uji Prasetel untuk <konfigurasiPreset> diperluas untuk menampilkan semua Preset Pengujian yang terkait dengan Preset Konfigurasi aktif. Memilih Satu Preset Pengujian sama dengan berjalan
ctest --preset <testPreset>
dari baris perintah, di mana<testPreset>
adalah nama Preset Pengujian yang dipilih. Opsi ini tidak tersedia jika tidak ada Preset Pengujian yang ditentukan untuk Preset Konfigurasi aktif.
Di Visual Studio 2019, Test Explorer tidak terintegrasi dengan CMakePresets.json
.
Menambahkan prasetel baru
Di Visual Studio 2019, semua perintah dan templat prasetel memodifikasi CMakePresets.json
. Anda dapat menambahkan preset tingkat pengguna baru dengan langsung mengedit CMakeUserPresets.json
.
Gunakan garis miring (/
) untuk jalur di CMakePresets.json
dan CMakeUserPresets.json
.
Menambahkan Prasetel Konfigurasi baru
Untuk menambahkan Preset Konfigurasi baru ke CMakePresets.json
, dari Penjelajah Solusi, klik CMakePresets.json
kanan dari Tampilan Folder dan pilih Tambahkan Konfigurasi dari menu pintasan. Dialog untuk memilih templat KonfigurasiKan Prasetel muncul:
Pilih templat Windows x64 Debug untuk dikonfigurasi pada sistem Windows. Pilih templat Linux Debug untuk dikonfigurasi pada WSL dan sistem Linux jarak jauh. Untuk informasi selengkapnya tentang pengeditan CMakePresets.json
, lihat Mengedit prasetel.
Templat yang dipilih ditambahkan ke CMakePresets.json
jika ada. Jika tidak, templat disalin ke dalam file baru CMakePresets.json
.
Menambahkan Preset Build dan Preset Pengujian baru
Visual Studio 2019 tidak menawarkan templat untuk Preset Build dan Preset Pengujian baru. Anda dapat menambahkan Build Presets dan Test Presets dengan langsung mengedit CMakePresets.json
. Untuk informasi selengkapnya, lihat daftar Preset Build, daftar Preset Pengujian, atau file contohCMakePresets.json
.
Mengedit prasetel
Dokumentasi CMake resmi adalah sumber daya terbaik untuk mengedit Mengonfigurasi Preset, Build Presets, dan Test Presets. Informasi berikut adalah subset dokumentasi CMake yang sangat relevan dengan pengembang Visual Studio.
Pilih pengkompilasi Anda
Anda dapat mengatur pengkompilasi C dan C++ dengan menggunakan cacheVariables.CMAKE_C_COMPILER
dan cacheVariables.CMAKE_CXX_COMPILER
dalam Prasetel Konfigurasi. Ini setara dengan meneruskan -D CMAKE_C_COMPILER=<value>
dan -D CMAKE_CXX_COMPILER=<value>
ke CMake dari baris perintah. Untuk informasi selengkapnya, lihat CMAKE_<LANG>_COMPILER
.
Gunakan contoh berikut untuk membangun dengan cl.exe
dan clang-cl.exe
dari Visual Studio. Alat C++ Clang untuk komponen Windows harus diinstal agar Anda dapat membangun dengan clang-cl
.
Bangun dengan cl.exe
:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "cl",
"CMAKE_CXX_COMPILER": "cl"
},
Bangun dengan clang
:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "clang-cl",
"CMAKE_CXX_COMPILER": "clang-cl"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"intelliSenseMode": "windows-clang-x64"
}
}
Jika Anda menggunakan salah satu Visual Studio 16 2019
atau Visual Studio 17 2022
sebagai generator, Anda dapat menggunakan toolset
Preset Konfigurasi untuk menentukan toolset ClangCL
:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
},
"toolset": "ClangCL",
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"intelliSenseMode": "windows-clang-x64"
}
}
Untuk informasi selengkapnya tentang generator yang mendukung toolset
spesifikasi, lihat CMAKE_GENERATOR_TOOLSET
dalam dokumentasi CMake.
Penting
Di Visual Studio 2019, Anda harus secara eksplisit menentukan mode Clang IntelliSense saat membangun dengan clang
atau clang-cl
.
Untuk mereproduksi build ini di luar Visual Studio, lihat Menjalankan CMake dari baris perintah atau alur CI.
Untuk membangun di Linux atau tanpa toolset Visual C++, tentukan nama pengkompilasi pada instans Anda PATH
, atau variabel lingkungan yang mengevaluasi ke jalur lengkap pengkompilasi. Jalur lengkap tidak disarankan sehingga file dapat tetap dapat dibagikan. Prasetel yang dibuat dengan GCC versi 8 mungkin terlihat seperti ini:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "gcc-8",
"CMAKE_CXX_COMPILER": "g++-8"
},
Anda juga dapat mengatur pengkompilasi dengan file toolchain CMake. File toolchain dapat diatur dengan , yang setara dengan cacheVariables.CMAKE_TOOLCHAIN_FILE
meneruskan -D CMAKE_TOOLCHAIN_FILE=<value>
ke CMake dari baris perintah. File toolchain CMake paling sering digunakan untuk kompilasi silang. Untuk informasi selengkapnya tentang penulisan file toolchain CMake, lihat Toolchain CMake.
Pilih generator Anda
Templat Windows dan Linux Configure Preset menentukan Ninja sebagai generator default. Generator umum lainnya adalah Generator Visual Studio di Windows dan Unix Makefiles di Linux dan macOS. Anda dapat menentukan generator baru dengan generator
opsi dalam Prasetel Konfigurasi. Setara dengan meneruskan -G
ke CMake dari baris perintah.
Atur architecture.strategy
dan toolset.strategy
ke set
saat Anda membangun dengan Visual Studio Generator. Untuk informasi selengkapnya, lihat Generator CMake.
Pilih jenis konfigurasi Anda
Anda dapat mengatur jenis konfigurasi (Debug
atau Release
) untuk generator konfigurasi tunggal dengan menggunakan cacheVariables.CMAKE_BUILD_TYPE
. Setara dengan meneruskan -D CMAKE_BUILD_TYPE=<value>
ke CMake dari baris perintah. Untuk informasi selengkapnya, lihat CMAKE_BUILD_TYPE
.
Pilih arsitektur target dan host Anda saat membangun dengan toolset Visual C++
Anda dapat mengatur arsitektur target (x64, Win32, ARM64, atau ARM) dengan menggunakan architecture.value
. Setara dengan meneruskan -A
ke CMake dari baris perintah. Untuk informasi selengkapnya, lihat Pemilihan Platform.
Catatan
Saat ini, Visual Studio Generators mengharapkan sintaks Win32 dan generator baris perintah (seperti Ninja) mengharapkan sintaks x86 saat Anda membangun untuk x86.
Anda dapat mengatur arsitektur host (x64 atau x86) dan toolset dengan menggunakan toolset.value
. Setara dengan meneruskan -T
ke CMake dari baris perintah. Untuk informasi selengkapnya, lihat Pilihan Toolset.
Nilai architecture.strategy
dan toolset.strategy
memberi tahu CMake cara menangani bidang arsitektur dan toolset. set
berarti CMake menetapkan nilai masing-masing, dan external
berarti CMake tidak akan menetapkan nilai masing-masing.
Sebaiknya gunakan set
dengan generator IDE seperti Visual Studio Generator. Gunakan external
dengan generator baris perintah seperti Ninja. Nilai-nilai ini memungkinkan vendor seperti Visual Studio untuk menyediakan lingkungan yang diperlukan sebelum CMake dipanggil. Untuk informasi selengkapnya tentang bidang arsitektur dan toolset, lihat daftar Mengonfigurasi Preset.
Jika Anda tidak ingin sumber lingkungan, Anda dapat mengatur architecture.strategy
ke external
dan architecture.value
ke unspecified
. Anda mungkin merasa berguna untuk tidak sumber lingkungan karena salah satu alasan berikut:
- Anda menggunakan toolset selain MSVC.
- Anda menggunakan toolchain kustom, seperti dalam skenario yang disematkan.
- Anda tidak memerlukan lingkungan tertentu untuk membangun.
Untuk daftar lengkap generator IDE yang mendukung bidang arsitektur, lihat CMAKE_GENERATOR_PLATFORM
. Untuk daftar lengkap generator IDE yang mendukung bidang toolset, lihat CMAKE_GENERATOR_TOOLSET
.
Gunakan contoh berikut untuk menargetkan ARM64 dengan generator Ninja, atau untuk menargetkan Win32 (x86) dengan generator Visual Studio 16 2019:
"generator": "Ninja",
"architecture": {
"strategy": "external",
"value": "arm64"
},
"generator": "Visual Studio 16 2019",
"architecture": {
"strategy": "set",
"value": "Win32"
},
Mengatur dan mereferensikan variabel lingkungan
Anda dapat mengatur variabel lingkungan dengan menggunakan peta lingkungan. Variabel lingkungan diwariskan melalui inherits
bidang , tetapi Anda dapat mengambil alihnya sesuai keinginan Anda.
Lingkungan prasetel adalah persatuan lingkungannya sendiri dan lingkungan dari semua orang tuanya. Jika beberapa inherits
prasetel memberikan nilai yang bertentangan untuk variabel yang sama, preset sebelumnya dalam inherits
daftar lebih disukai. Anda dapat membatalkan set variabel yang diwarisi dari preset lain dengan mengaturnya ke null
.
Variabel lingkungan yang diatur dalam Preset Konfigurasi juga secara otomatis mengalir ke Preset Build dan Preset Pengujian terkait, kecuali inheritConfigureEnvironment
diatur ke false
. Untuk informasi selengkapnya, lihat daftar Konfigurasi Preset.
Anda dapat mereferensikan variabel lingkungan dengan menggunakan $env{<variable-name>}
sintaks dan $penv{<variable-name>}
. Untuk informasi selengkapnya, lihat Ekspansi Makro.
Mengonfigurasi IntelliSense untuk pengkompilasi silang
Secara default, Visual Studio menggunakan mode IntelliSense yang cocok dengan set alat dan arsitektur target yang Anda tentukan. Jika Anda mengkompilasi silang, Anda mungkin perlu menentukan mode IntelliSense yang benar secara manual dengan menggunakan intelliSenseMode
opsi di peta vendor Pengaturan Visual Studio. Untuk informasi selengkapnya, lihat entri untuk intelliSenseMode
dalam tabel di bawah peta vendor Pengaturan Visual Studio.
Mengonfigurasi dan membangun pada sistem jarak jauh atau Subsistem Windows untuk Linux
Dengan CMakePresets.json
dukungan di Visual Studio, Anda dapat dengan mudah mengonfigurasi dan membangun proyek Anda di Windows, WSL, dan sistem jarak jauh. Langkah-langkah untuk mengonfigurasi dan membangun proyek Anda di Windows, sistem jarak jauh, atau WSL sama. Namun, beberapa perilaku khusus untuk pengembangan jarak jauh.
${sourceDir}
perilaku dalam skenario penyalinan jarak jauh
Dalam skenario lokal (termasuk WSL1), ${sourceDir}
mengevaluasi ke jalur ke direktori sumber proyek yang terbuka di Visual Studio. Dalam skenario salinan jarak jauh, ${sourceDir}
mengevaluasi ke jalur ke direktori sumber proyek pada Sistem Target dan bukan direktori sumber proyek pada komputer lokal.
Nilai sourceDir
dalam peta vendor Pengaturan Jarak Jauh Visual Studio menentukan direktori sumber proyek pada Sistem Target (default ke $env{HOME}/.vs/$ms{projectDirName}
). Untuk informasi selengkapnya, lihat entri untuk sourceDir
dalam tabel di bawah peta vendor Pengaturan Visual Studio.
Folder lokal untuk output jarak jauh
Skenario penyalinan jarak jauh memerlukan direktori lokal untuk menyalin beberapa file jarak jauh seperti file respons API File CMake atau file build jika copyBuildOutput
di peta vendor Pengaturan Jarak Jauh Visual Studio diatur ke true
. File-file ini secara otomatis disalin ke <local-source-directory>/out/<remote-connection-ID>/build/${presetName}
.
Memanggil Prasetel Konfigurasi yang sama pada Windows dan WSL1
Anda akan melihat kesalahan jika mencoba menggunakan Konfigurasi Preset yang sama di Windows dan WSL1. Windows dan WSL1 keduanya menggunakan sistem file Windows, sehingga CMake akan mencoba menggunakan direktori output yang sama (binaryDir
) untuk pohon build Windows dan WSL1.
Jika Anda ingin menggunakan Preset Konfigurasi yang sama dengan Windows dan toolset WSL1, buat Preset Konfigurasi kedua yang mewarisi dari preset asli dan menentukan nilai baru binaryDir
. Dalam contoh berikut, windows-preset
dapat digunakan pada Windows dan base-preset
dapat digunakan pada WSL1:
{
"name": "windows-preset",
"inherits": "base-preset",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": "Windows"
}
}
}
Catatan
Di Visual Studio 2019, hanya toolset WSL1 yang didukung. Anda akan melihat perilaku ini setiap kali Anda memanggil configure
di Windows dan WSL.
Mengaktifkan integrasi vcpkg
Vcpkg membantu Anda mengelola pustaka C dan C++ di Windows, Linux, dan macOS. File toolchain vcpkg (vcpkg.cmake
) harus diteruskan ke CMake untuk mengaktifkan integrasi vcpkg. Untuk informasi selengkapnya, lihat dokumentasi vcpkg.
Visual Studio tidak lagi meneruskan file toolchain vcpkg Anda ke CMake secara otomatis saat CMakePresets.json
integrasi diaktifkan. Perubahan ini menghilangkan perilaku khusus Visual Studio dan memastikan bahwa Anda dapat mereproduksi build dari baris perintah.
Sebagai gantinya, atur jalur ke vcpkg.cmake
dengan menggunakan VCPKG_ROOT
variabel lingkungan di CMakePresets.json
:
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": {
"value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"type": "FILEPATH"
}
},
VCPKG_ROOT
harus diatur ke akar penginstalan vcpkg Anda. Untuk informasi selengkapnya, lihat variabel lingkungan vcpkg.
Jika Anda sudah menggunakan file toolchain CMake dan ingin mengaktifkan integrasi vcpkg, lihat Menggunakan beberapa file toolchain. Ikuti instruksi tersebut untuk menggunakan file toolchain eksternal dengan proyek dengan menggunakan vcpkg.
Substitusi variabel dalam launch.vs.json
dan tasks.vs.json
CMakePresets.json
mendukung substitusi variabel di launch.vs.json
dan tasks.vs.json
. Berikut adalah beberapa pertimbangan:
Variabel lingkungan yang diatur dalam Konfigurasi Preset aktif secara otomatis mengalir melalui ke
launch.vs.json
dantasks.vs.json
konfigurasi. Anda dapat membatalkan pengaturan variabel lingkungan individual di danlaunch.vs.json
tasks.vs.json
dengan mengaturnya kenull
. Contoh berikut mengatur variabelDEBUG_LOGGING_LEVEL
kenull
dalamlaunch.vs.json
:"env": { "DEBUG_LOGGING_LEVEL": null }
.Nilai kunci yang diatur dalam Preset Konfigurasi aktif tersedia untuk dikonsumsi di
launch.vs.json
dantasks.vs.json
dengan sintaks${cmake.<KEY-NAME>}
. Misalnya, gunakan${cmake.binaryDir}
untuk mereferensikan direktori output dari Preset Konfigurasi aktif.Variabel lingkungan individual yang diatur dalam peta lingkungan Dari Preset Konfigurasi aktif tersedia untuk dikonsumsi di
launch.vs.json
dantasks.vs.json
melalui sintaks${env.<VARIABLE-NAME>}
.
Perbarui file dan task.vs.json
Anda launch.vs.json
ke sintaks referensi CMakePresets.json
alih-alih CMakeSettings.json
sintaks. Makro yang mereferensikan sintaks lama CMakeSettings.json
ketika CMakePresets.json
file konfigurasi aktif dijadwalkan untuk penghentian dalam rilis mendatang. Misalnya, referensikan direktori output dari Preset Konfigurasi aktif dengan ${cmake.binaryDir}
alih-alih ${cmake.buildRoot}
, karena CMakePresets.json
menggunakan binaryDir
sintaks.
Pecahkan masalah
Jika semuanya tidak berfungsi seperti yang diharapkan, Anda dapat mencoba beberapa langkah pemecahan masalah.
Jika salah satu CMakePresets.json
atau CMakeUserPresets.json
tidak valid, Visual Studio akan kembali pada perilaku defaultnya dan hanya menampilkan Preset Konfigurasi default. Visual Studio IntelliSense dapat membantu Anda menangkap banyak kesalahan JSON ini, tetapi tidak akan tahu apakah Anda mereferensikan prasetel dengan atau configurePreset
dengan inherits
nama yang salah.
Untuk memeriksa apakah file prasetel Anda valid, jalankan cmake --list-presets
dari baris perintah di akar direktori proyek Anda. (CMake 3.20 atau yang lebih baru diperlukan.) Jika salah satu file tidak valid, Anda akan melihat kesalahan berikut:
CMake Error: Could not read presets from
C:/Users/<user>/source/repos/<project-name>: JSON parse error
Langkah-langkah pemecahan masalah lainnya meliputi:
- Hapus cache dan konfigurasi ulang proyek (CMake: Hapus Cache dan Project>Configure <project-name).>
- Tutup dan buka kembali folder di Visual Studio (File>Close Folder).
.vs
Hapus folder di akar proyek Anda.
Jika Anda telah mengidentifikasi masalah, cara terbaik untuk melaporkannya adalah dengan memilih tombol Kirim Umpan Balik di sudut kanan atas Visual Studio.
Aktifkan pengelogan untuk koneksi jarak jauh
Anda dapat mengaktifkan pengelogan untuk koneksi jarak jauh jika Anda mengalami masalah saat menyambungkan atau menyalin file ke sistem jarak jauh. Untuk informasi selengkapnya, lihat Pengelogan untuk koneksi jarak jauh.
Mengaktifkan AddressSanitizer untuk Windows dan Linux
Visual Studio mendukung AddressSanitizer (ASAN), detektor kesalahan memori runtime C dan C++, untuk pengembangan Windows dan Linux. Opsi addressSanitizerEnabled
dalam CMakeSettings.json
mengaktifkan AddressSanitizer. CMakePresets.json
tidak mendukung perilaku ini.
Sebagai gantinya, aktifkan dan nonaktifkan AddressSanitizer dengan mengatur sendiri bendera pengkompilasi dan linker yang diperlukan. Mengaturnya menghapus perilaku khusus Visual Studio dan memastikan bahwa file yang sama CMakePresets.json
dapat mereproduksi build Anda dari baris perintah.
Anda dapat menambahkan sampel berikut untuk CMakeLists.txt
mengaktifkan atau menonaktifkan AddressSanitizer untuk target:
option(ASAN_ENABLED "Build this target with AddressSanitizer" ON)
if(ASAN_ENABLED)
if(MSVC)
target_compile_options(<target> PUBLIC /fsanitize=address)
else()
target_compile_options(<target> PUBLIC -fsanitize=address <additional-options>)
target_link_options(<target> PUBLIC -fsanitize=address)
endif()
endif()
Bagian ini <additional-options>
mencantumkan bendera kompilasi lainnya, seperti "-fno-omit-frame-pointer"
. Untuk informasi selengkapnya tentang AddressSanitizer untuk Linux, lihat Menggunakan AddressSanitizer. Untuk informasi selengkapnya tentang menggunakan AddressSanitizer dengan MSVC, lihat Menggunakan AddressSanitizer dari prompt perintah pengembang.
Teruskan bendera runtime ke AddressSanitizer dengan menggunakan ASAN_OPTIONS
bidang di launch.vs.json
. ASAN_OPTIONS
default ke detect_leaks=0
ketika tidak ada opsi runtime lain yang ditentukan karena LeakSanitizer tidak didukung di Visual Studio.
Jalankan CMake dari baris perintah atau alur CI
Anda dapat menggunakan file dan CMakeUserPresets.json
yang sama CMakePresets.json
untuk memanggil CMake di Visual Studio dan dari baris perintah. Dokumentasi CMake dan CTest adalah sumber daya terbaik untuk memanggil CMake dan CTest dengan --preset
. CMake versi 3.20 atau yang lebih baru diperlukan.
Sumber lingkungan saat membangun dengan generator baris perintah di Windows
Terserah pengguna untuk mengonfigurasi lingkungan sebelum CMake dipanggil dalam membangun dengan generator baris perintah. Jika Anda membangun dengan Ninja dan toolset Visual C++ di Windows, atur lingkungan sebelum CMake dipanggil untuk menghasilkan sistem build. Anda dapat melakukannya dengan memanggil vcvarsall.bat
dengan architecture
argumen . Argumen architecture
menentukan arsitektur host dan target yang akan digunakan. Untuk informasi selengkapnya, lihat vcvarsall
sintaks. Jika Anda membangun di Linux atau di Windows dengan Visual Studio Generator, Anda tidak perlu mengambil langkah ini.
Ini adalah langkah yang sama dengan yang diambil Visual Studio untuk Anda ketika IDE memanggil CMake. Visual Studio menguraikan Preset Konfigurasi aktif untuk arsitektur host dan target yang ditentukan oleh toolset
dan architecture
. Visual Studio kemudian sumber lingkungan yang ditentukan dari vcvarsall.bat
. Ketika Anda membangun dari baris perintah Windows dengan Ninja, Anda harus mengambil langkah ini sendiri.
vcvarsall.bat
diinstal dengan Alat Build untuk Visual Studio. Secara default, vcvarsall.bat
diinstal di C:\Program Files (x86)\Microsoft Visual Studio\2019\<edition>\VC\Auxiliary\Build
. Anda dapat menambahkan vcvarsall.bat
ke PATH
jika Anda sering menggunakan alur kerja baris perintah.
Contoh alur kerja baris perintah
Anda dapat menggunakan perintah berikut untuk mengonfigurasi dan membangun proyek CMake yang menggunakan Ninja untuk menargetkan ARM64 dengan alat build x64. CMake versi 3.20 atau yang lebih baru diperlukan. Jalankan perintah ini dari direktori tempat file Anda CMakePresets.json
berada:
/path/to/vcvarsall.bat x64_arm64
cmake --list-presets=all .
cmake --preset <configurePreset-name>
cmake --build --preset <buildPreset-name>
Contoh CMakePresets.json
file
File CMakePresets.json
dalam box2d-lite berisi contoh Konfigurasi Preset, Build Presets, dan Test Presets. Untuk informasi selengkapnya tentang contoh ini, lihat presentasi Pengantar CMakePresets.json. Anda dapat melihat contoh lain dalam proyek DirectXTK , yang menunjukkan banyak target build di bagiannya configurePresets
.
Langkah berikutnya
Pelajari selengkapnya tentang mengonfigurasi dan men-debug proyek CMake di Visual Studio: