2010-07-08 21 views
106

Visual C++, XCode ve maketlerden CMake'e kadar farklı yapı yönetim sistemlerinden çapraz platform projesini değiştirmeyi düşünüyorum.CMake - Bir klasördeki tüm dosyaları bir hedefe otomatik olarak ekleme?

İhtiyacım olan önemli bir özellik, bir dizindeki tüm dosyaları otomatik olarak bir hedefe eklemektir. Bu make ile yapmak kolay olsa da, Visual C++ ve XCode ile kolayca yapılabilir (yanlışsam beni düzelt). Doğrudan CMake içinde yapmak mümkün mü? Nasıl?

Şu anda projenin orta büyüklükte olduğunu (8 kütüphane, 2 yürütülebilir, 8 test projesi) ve 8 harici libreye bağlı olduğunu düşünerek CMake öğrenmeye başlamadan önce bilmem gereken başka bir şey eklemekten çekinmeyin).

+0

Btw. Visual Studio'da, en azından C# projelerinde, proje gezgini içinde tüm dosyaları göster isimli bir araç çubuğu düğmesi vardır. Bir projenin tüm alt dizinlerini, projede mantıksal olarak yer alan herhangi bir dosya içermiyorsa, grileştirir. Bu dizinleri içerdeki tüm kaynak dosyaları içeren bağlam menüsü üzerinden tekrarlı olarak ekleyebilirsiniz :) – yeoman

cevap

154

Bu mümkündür. Örneğin.

cmake_minimum_required(VERSION 2.8) 

file(GLOB helloworld_SRC 
    "*.h" 
    "*.cpp" 
) 

add_executable(helloworld ${helloworld_SRC}) 

bir kaynak dosyası yeniden oluşturmak için CMake sormaya ne zaman bilmez oluşturulan yapı sisteminin beri eklenir veya kaldırılırsa, bu cmake ait manuel yeniden çalışmasını gerektirdiğini Not ve en yapıyor: file(GLOB ile her yapı inşa süresini artıracaktır.

+8

Cmake'yı elle yeniden çalıştırmak için bir alternatif, make çalıştırmadan önce CMakeLists.txt dosyasına dokunmaktır. –

+1

"GLOB" seçeneğine alternatif: ['file (GLOB_RECURSE değişkeni [RELATIVE yol] [FOLLOW_SYMLINKS] [globbing ifadeleri] ...)] https://cmake.org/cmake/help/v3.0/command/ dosya.html). – Hydro

+2

> "Kaynak ağacınızın kaynak dosyalarının bir listesini toplamak için GLOB kullanmanızı önermiyoruz. Bir kaynak eklendiğinde veya kaldırıldığında CMakeLists.txt dosyası değişmezse, oluşturulan oluşturma sistemi CMake'in ne zaman yeniden üretilmesini isteyeceğini bilemez." Bu, artık "GLOB_RECURSE" değil, Hand1Cloud – triple

27

Kleist tarafından cevap kesinlikle çalışır, ancak önemli bir uyarı var: el ile Makefile yazarken, tüm .cpp ve .h dosyaları seçmek için bir işlev kullanarak SRCS değişkeni oluşturabilir

. Bir kaynak dosya daha sonra eklenirse, make yeniden çalıştırmayı içerecektir. Ancak, CMake (file(GLOB ...) gibi bir komutla) bir dosya listesi oluşturacak ve otomatik olarak oluşturulan Makefile içine yerleştirecektir. Yeni bir kaynak dosyanız varsa, Makefile'u yeniden cmake yeniden çalıştırarak yeniden oluşturmanız gerekir.

düzenleme: Makefile'ı kaldırmaya gerek yoktur.

+4

Sadece yeniden çalıştırmak olabilir, hangi tarih-dışı Makefile kaldırmak/değiştirmek gerekir? – Ethan

+1

Ethan: Sadece denedim, siz haklısınız. –

+7

Bu bir cevap değil, @ Kleist'in cevabı hakkında bir yorum var. – Neowizard

İlgili konular