Saya sedang mengerjakan proyek C ++ open source, untuk kode yang dikompilasi di Linux dan Windows. Saya menggunakan CMake untuk membuat kode di Linux. Untuk kemudahan pengaturan pengembangan dan alasan politik, saya harus tetap menggunakan file / editor proyek Visual Studio di Windows (saya tidak dapat beralih ke Code :: Blocks , misalnya). Saya melihat instruksi untuk menghasilkan file Visual Studio menggunakan CMake, seperti di sini .
Pernahkah Anda menggunakan CMake untuk menghasilkan file Visual Studio sebelumnya? Bagaimana pengalaman Anda? Misalkan saya ingin menambahkan file baru ke proyek saya. Apa alur kerja untuk ini?
Jawaban:
CMake sebenarnya cukup bagus untuk ini. Bagian kuncinya adalah setiap orang di sisi Windows harus ingat untuk menjalankan CMake sebelum memuat solusi, dan semua orang di sisi Mac kami harus ingat untuk menjalankannya sebelum membuatnya.
Bagian tersulit adalah sebagai pengembang Windows memastikan perubahan struktural Anda ada di file cmakelist.txt dan bukan dalam solusi atau file proyek karena perubahan itu mungkin akan hilang dan bahkan jika tidak hilang tidak akan ditransfer ke sisi Mac yang juga membutuhkannya, dan orang-orang Mac harus ingat untuk tidak mengubah file make karena alasan yang sama.
Ini hanya membutuhkan sedikit pemikiran dan kesabaran, tetapi akan ada kesalahan pada awalnya. Tetapi jika Anda menggunakan integrasi berkelanjutan di kedua sisi maka ini akan terguncang lebih awal, dan orang-orang pada akhirnya akan terbiasa.
sumber
C:\...> MSBuild ALL_BUILD.vcxproj
cmake --build .
.cmake --build . --config Debug -- /nologo /verbosity:minimal /m
. Saya akan memasukkan after.
target run_tests
untuk menjalankan pengujian unit googletest saya, dan "Debug" dapat diganti dengan "Rilis". (Menambahkan opsi konfigurasi untuk Debug adalah opsional, karena ini adalah default, tetapi saya menyertakannya untuk menunjukkan bagaimana itu dapat ditukar dengan "Rilis")Tidak yakin apakah itu terkait langsung dengan pertanyaan, tetapi saya sedang mencari jawaban untuk cara menghasilkan * .sln dari proyek cmake. Saya telah menemukan bahwa seseorang dapat menggunakan sesuatu seperti ini:
cmake -G "Visual Studio 10"
Contoh ini menghasilkan file VS 2010 yang diperlukan dari file CMakeLists.txt input
sumber
cmake
.Kami memindahkan rantai build departemen kami ke CMake, dan kami memiliki beberapa roadbump internal sejak departemen lain menggunakan file proyek kami dan biasanya hanya mengimpornya ke dalam solusi mereka. Kami juga memiliki beberapa keluhan tentang CMake yang tidak sepenuhnya terintegrasi ke dalam proyek Visual Studio / manajer solusi, sehingga file harus ditambahkan secara manual ke CMakeLists.txt; ini adalah jeda besar dalam alur kerja yang biasa dilakukan orang.
Tetapi secara umum, ini adalah transisi yang cukup mulus. Kami sangat senang karena kami tidak perlu lagi berurusan dengan file proyek.
Alur kerja konkret untuk menambahkan file baru ke sebuah proyek sangat sederhana:
CMake 2.6 secara otomatis menjalankan ulang sendiri jika file CMakeLists.txt telah berubah (dan (semi-) secara otomatis memuat ulang solusi / proyek).
Ingat bahwa jika Anda melakukan build di luar sumber, Anda harus berhati-hati agar tidak membuat file sumber di direktori build (karena Visual Studio hanya mengetahui tentang direktori build).
sumber
Seperti yang dikatakan Alex, ini bekerja dengan sangat baik. Satu-satunya bagian yang sulit adalah mengingat untuk membuat perubahan apa pun di file cmake, bukan dari dalam Visual Studio. Jadi di semua platform, alur kerjanya mirip dengan jika Anda menggunakan makefile biasa.
Tapi itu cukup mudah untuk dikerjakan, dan saya tidak punya masalah dengan cmake membuat file yang tidak valid atau semacamnya, jadi saya tidak akan terlalu khawatir.
sumber
CMake menghasilkan Proyek dan Solusi Visual Studio dengan mulus. Anda bahkan dapat membuat proyek / solusi untuk berbagai versi Visual Studio tanpa membuat perubahan apa pun pada berkas CMake.
Menambah dan menghapus file sumber hanyalah masalah memodifikasi
CMakeLists.txt
yang memiliki daftar file sumber dan membuat ulang proyek / solusi. Bahkan ada fungsi globbing untuk menemukan semua sumber dalam direktori (meskipun harus digunakan dengan hati-hati).Tautan berikut menjelaskan perilaku khusus CMake dan Visual Studio dengan sangat baik.
CMake dan Visual Studio
sumber
CMake dapat menghasilkan Visual Studio
.projs
/ yang sangat bagus.slns
, tetapi selalu ada masalah dengan kebutuhan untuk memodifikasi.cmake
file daripada.proj
/.sln
. Seperti sekarang, kita menghadapinya sebagai berikut:/src
dan file yang terlihat di Visual Studio hanyalah "tautan" ke mereka yang ditentukan di.filter
./src
direktori yang ditentukan , bukan yang proyek default..cmake
file masing-masing .Pada awalnya kami sedikit takut bagaimana hasilnya, tetapi alur kerja bekerja dengan sangat baik dan dengan perbedaan yang bagus terlihat sebelum setiap komit, setiap orang dapat dengan mudah melihat apakah perubahannya dipetakan dengan benar dalam
.cmake
file.Satu hal penting yang perlu diketahui adalah kurangnya dukungan ( afaik ) untuk "Konfigurasi Solusi" di CMake. Seperti berdiri, Anda harus menghasilkan dua direktori dengan proyek / solusi - satu untuk setiap jenis build (debug, rilis, dll.). Tidak ada dukungan langsung untuk fitur yang lebih canggih - dengan kata lain: beralih antar konfigurasi tidak akan memberikan apa yang Anda harapkan.
sumber
Banyak jawaban bagus di sini tetapi mereka mungkin digantikan oleh dukungan CMake ini di Visual Studio (5 Okt 2016)
sumber
Saya telah memulai proyek saya sendiri, yang disebut syncProj. Dokumentasi / tautan unduhan dari sini:
https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/
Jika Anda berencana menggunakan Visual studio untuk pengembangan, dan saat ini hanya C ++ yang didukung.
Keuntungan utama dibandingkan dengan sistem make lain adalah Anda benar-benar dapat men-debug skrip Anda, karena itu berbasis C #.
Jika Anda tidak terbiasa dengan syncProj, Anda cukup mengonversi solusi / proyek Anda ke skrip .cs, dan melanjutkan pengembangan lebih lanjut sejak saat itu.
Dalam cmake Anda perlu menulis semuanya dari awal.
sumber