Visual Studio C ++ proje dosyaları oluşturmak için CMake kullanma


93

Linux ve Windows üzerinde derlenen kod için açık kaynaklı bir C ++ projesi üzerinde çalışıyorum. Linux'ta kodu oluşturmak için CMake kullanıyorum. Geliştirme kurulumunun kolaylığı ve politik nedenlerden dolayı, Windows'ta Visual Studio proje dosyalarına / düzenleyicisine bağlı kalmalıyım ( örneğin, Code :: Blocks'a geçemiyorum ). Burada olduğu gibi CMake kullanarak Visual Studio dosyaları oluşturma talimatlarını görüyorum .

Daha önce Visual Studio dosyaları oluşturmak için CMake kullandınız mı? Deneyiminiz nasıldı? Projeme yeni bir dosya eklemek istediğimi varsayalım. Bunun için iş akışı nedir?


1
Windows'a özgü olan Visual Studio için proje dosyaları oluşturmaya çalışan GNU + Linux kullanıcıları için bu yanıtı aklınızda bulundurun. TL; DR: Oluşturucular platforma özgüdür ve bunu yapmak için Windows'ta olmanız gerekir.
code_dredd

Yanıtlar:


57

CMake aslında bunun için oldukça iyidir. İşin püf noktası, Windows tarafındaki herkesin çözümü yüklemeden önce CMake'i çalıştırmayı hatırlaması gerektiğiydi ve Mac tarafımızdaki herkesin make'den önce çalıştırmayı hatırlaması gerekecekti.

En zor kısım, bir Windows geliştiricisi olarak yapısal değişikliklerinizin çözüm veya proje dosyalarında değil cmakelist.txt dosyasında olduğundan emin olmaktı, çünkü bu değişiklikler muhtemelen kaybolacak ve kaybolmasa bile Mac tarafına aktarılmayacaktır. ayrıca onlara da ihtiyaç duyuyordu ve Mac çalışanlarının aynı nedenlerle make dosyasını değiştirmemeleri gerektiğini hatırlamaları gerekiyordu.

Sadece biraz düşünmek ve sabır gerektirir, ancak ilk başta hatalar olacaktır. Ancak her iki tarafta da sürekli entegrasyon kullanıyorsanız , o zaman bunlar erkenden çıkarılacak ve insanlar sonunda alışkanlık kazanacaklar.


11
Bu bir zamanlar doğruysa artık değil. CMakeLists.txt'de yapılacak herhangi bir değişiklik, derleme sisteminin yenilenmesine neden olur (görsel stüdyo için proje dosyaları, makefiles, vb.). Visual Studio, işlerin değiştiğini algıladığında proje dosyalarını yeniden oluşturmadığından, bunun yerine derlemenin yeniden iptal edilmesi gerektiğinden bir iletişim kutusunun görünmesine neden olan bir yapı yapmanızı beklediğinden, Visual Studio içindeki iş akışı biraz can sıkıcıdır -proje dosyasını yükleyin.
Vitali

1
Bu konudaki uyarı, Visual Studio derleyicisini IDE aracılığıyla çalıştırmanız gerekmemesidir. Komut satırından çalıştırabilirsiniz:C:\...> MSBuild ALL_BUILD.vcxproj
PfunnyGuy

2
@PfunnyGuy Ayrıca bakınız cmake --build ..
detly

@detly Teşekkürler! Aslında onu buldum ve kullandım cmake --build . --config Debug -- /nologo /verbosity:minimal /m. . target run_testsGoogletest birim testimi çalıştırmak için sonrasına ekleyeceğim ve "Hata Ayıklama", "Yayın" ile değiştirilebilir. (Hata Ayıklama için yapılandırma seçeneğini eklemek varsayılan olduğundan isteğe bağlıdır, ancak bunu "
Yayınla

48

Doğrudan soruyla ilgili olup olmadığından emin değilim, ancak cmake projelerinden * .sln'i nasıl oluşturacağıma dair bir cevap arıyordum.Bunun gibi bir şeyin kullanılabileceğini keşfettim:

cmake -G "Visual Studio 10"

Örnek, bir giriş CMakeLists.txt dosyasından gerekli VS 2010 dosyalarını oluşturur


1
At stackoverflow.com/questions/11269833/... bu en üst düzey CMakeLists.txt aynı klasörde bir dosya PreLoad.cmake içine konabilir ve daha sonra sadece yapabileceği Çek şu @Ivan noktaları cmake.
PfunnyGuy

25

Departmanımızın yapı zincirini CMake'e taşıdık ve proje dosyalarımızı kullanan ve bunları sadece kendi çözümlerine aktarmaya alışkın olan diğer departmanlardan beri birkaç dahili engelimiz oldu. Ayrıca CMake'in Visual Studio proje / çözüm yöneticisine tam olarak entegre edilmediğine dair bazı şikayetlerimiz vardı, bu nedenle dosyaların CMakeLists.txt dosyasına manuel olarak eklenmesi gerekiyordu; bu, insanların alıştığı iş akışında büyük bir kırılmaydı.

Ancak genel olarak oldukça yumuşak bir geçiş oldu. Artık proje dosyalarıyla uğraşmak zorunda olmadığımız için çok mutluyuz.

Bir projeye yeni bir dosya eklemek için somut iş akışı gerçekten basittir:

  1. Dosyayı oluşturun, doğru yerde olduğundan emin olun.
  2. Dosyayı CMakeLists.txt dosyasına ekleyin.
  3. İnşa etmek.

CMakeLists.txt dosyası değiştiyse (ve (yarı-) çözümü / projeleri otomatik olarak yeniden yüklerse) CMake 2.6 otomatik olarak kendini yeniden çalıştırır.

Kaynak dışı derlemeler yapıyorsanız, kaynak dosyasını derleme dizininde oluşturmamaya dikkat etmeniz gerektiğini unutmayın (çünkü Visual Studio yalnızca derleme dizini hakkında bilgi sahibidir).


9

Alex'in dediği gibi, çok iyi çalışıyor. Tek zor kısım, Visual Studio içinden değil, cmake dosyalarında herhangi bir değişiklik yapmayı hatırlamaktır. Dolayısıyla, tüm platformlarda, iş akışı, düz eski makefiles kullanmanıza benzer.

Ama onunla çalışmak oldukça kolay ve cmake'nin geçersiz dosyalar veya bunun gibi bir şey oluşturmasıyla ilgili hiçbir sorun yaşamadım, bu yüzden fazla endişelenmem.


9

CMake, Visual Studio Projelerini ve Çözümlerini sorunsuz bir şekilde üretir. CMake dosyalarında herhangi bir değişiklik yapmadan farklı Visual Studio sürümleri için projeler / çözümler bile üretebilirsiniz.

Kaynak dosyaları eklemek ve kaldırmak sadece kaynak dosyalar CMakeLists.txtlistesine sahip olanı değiştirmek ve projeleri / çözümleri yeniden oluşturmaktan ibarettir. Bir dizindeki tüm kaynakları bulmak için bir globbing işlevi bile vardır (ancak dikkatli kullanılmalıdır).

Aşağıdaki bağlantı CMake ve Visual Studio'ya özgü davranışı çok iyi açıklamaktadır.

CMake ve Visual Studio


Bu bağlantı ve örnek projesi çok ama çok kullanışlı, bunun için teşekkürler! Ben kaynak kodunun bazı birleşmeyle öneriyoruz github repo bir CKağıt proje çözümün eşdeğerdir ve benzeri bir şeyin söz örneğin Cevabınız içine add_executable görsel stüdyo projesi eşdeğer eklemek için kullanılır.
JRH

5

CMake gerçekten güzel Visual Studio .projs/ oluşturabilir .slns, ancak her zaman / .cmakeyerine dosyaları değiştirme ihtiyacı ile ilgili bir sorun vardır . Şimdi olduğu gibi biz de bununla şu şekilde ilgileniyoruz:.proj.sln

  1. Tüm kaynak dosyalara gider /srcve Visual Studio'da görünen dosyalar, içinde tanımlanan "bağlantılar" dır .filter.
  2. Programcı /src, varsayılan projenin değil, tanımlanan dizinde çalışmayı hatırlayarak dosyaları ekler / siler .
  3. Bitirdiğinde, ilgili .cmakedosyaları "yenileyen" bir komut dosyası çalıştırır .
  4. Kodun yeniden yaratılan ortamda oluşturulup oluşturulamayacağını kontrol eder.
  5. Kodu işliyor.

İlk başta bunun nasıl sonuçlanacağından biraz korkuyorduk, ancak iş akışı gerçekten iyi çalışıyor ve her işlemden önce güzel farklar göründüğünden, değişikliklerinin .cmakedosyalarda doğru şekilde eşlenip eşlenmediğini herkes kolayca görebilir .

Bilmeniz gereken bir diğer önemli nokta, CMake'deki "Çözüm Yapılandırmaları" için destek ( afaik ) eksikliğidir . Mevcut haliyle, projeler / çözümler içeren iki dizin oluşturmalısınız - her yapı türü için bir tane (hata ayıklama, sürüm, vb.). Daha karmaşık özellikler için doğrudan bir destek yoktur - başka bir deyişle: yapılandırmalar arasında geçiş yapmak size beklediğinizi vermez.


4
CMake 2.8.10'dan itibaren, oluşturulan çözümler 4 geleneksel yapı konfigürasyonuna sahiptir ve ek özel olanları tanımlama desteği vardır.
John


0

SyncProj adlı kendi projemi başlattım. Belgeleme / indirme bağlantıları buradan:

https://docs.google.com/document/d/1C1YrbFUVpTBXajbtrC62aXru2om6dy5rClyknBj5zHU/edit# https://sourceforge.net/projects/syncproj/

Geliştirme için Visual Studio'yu kullanmayı planlıyorsanız ve şu anda yalnızca C ++ desteklenmektedir.

Diğer yapım sistemlerine kıyasla ana avantajı, C # tabanlı olduğu için betiğinizde gerçekten hata ayıklayabilmenizdir.

SyncProj'a aşina değilseniz, çözümünüzü / projenizi .cs betiğine dönüştürebilir ve o noktadan sonra geliştirmeye devam edebilirsiniz.

Cmake'de her şeyi sıfırdan yazmanız gerekecek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.