2011-07-31 21 views
52

Proje kökümde ve/src klasöründe bir CMakeLists.txt var./Src klasöründeki bir dosya sadece .cpp dosyaları (set (SOURCEFILES main.cpp foo.cpp)) ve kök CMakeLists.txt dosyasında add_subdirectory(src) yapıyorum ve daha sonra add_executable(MyApp ${SOURCEFILES}) yapıyorum.cmake değişken kapsamı, add_subdirectory

Ama cmake bana hata argümanlar yanlış numarasıyla adlandırılan

add_executable verir

nasıl değişkeni görmek için cmake alırım

sağlanan hiçbir kaynaklar ? Ben cmake yalnızca genel değişkenleri bilir okumak, ama bu set komuta belgelerinde belirtildiği gibi

cevap

78

... Açıkçası böyle değil, her dizin add_subdirectory ile eklenen veya function ile bildirilen her fonksiyon yeni bir kapsam oluşturur.

Yeni çocuk kapsamı, tüm değişken tanımlarını üst kapsamından devralır. set komutuyla yeni çocuk kapsamındaki değişken atamalar, yalnızca PARENT_SCOPE seçeneği kullanılmadığı sürece alt bölümde görünür olacaktır.

projenizin kök klasöründe SOURCEFILES atama görünür hale getirmek için, deneyin:

set (SOURCEFILES main.cpp foo.cpp PARENT_SCOPE) 
+2

Teşekkür, bunu çözdü. Ama başka bir not: alt dizinde şu anda cmake artık ana kapsamda olduğundan '' foo.cpp' yerine '$ {CMAKE_CURRENT_SOURCE_DIR}/foo.cpp' kullanmak zorundasınız. – blubberbernd

+2

Alternatif olarak, add_subdirectory çağrısından önce üst CMakeLists.txt dosyasındaki değişkeni ayarlayabilir ve tanımının alt CMakeLists dosyasına devralmasını sağlayabilirsiniz. Yine, birden çok CMakeLists dosyasından onlara başvurmanız gerekiyorsa dosyaların adlarını doğrulamanız gerekir. – DLRdave

+5

Alt-dir/işlevindeki değerlerini kullanmak için geçerli kapsamda da değişken oluşturmanız gerekir: 'set (VAR değeri PARENT_SCOPE); set (VAR $ {VAR}); –