CMAKE_CURRENT_SOURCE_DIR ve CMAKE_CURRENT_LIST_DIR arasındaki fark


105

Wiki'den:

CMAKE_CURRENT_SOURCE_DIR Bu, şu anda işlenen CMakeLists.txt dosyasının bulunduğu dizindir

CMAKE_CURRENT_LIST_DIR ( 2.8.3'ten beri) bu, şu anda işlenmekte olan liste dosyasının dizinidir.

Dokümanlar'dan:

CMAKE_CURRENT_SOURCE_DIR: Şu anda işlenmekte olan kaynak dizinin yolu. Bu, şu anda cmake tarafından işlenmekte olan kaynak dizinin tam yolu.

CMAKE_CURRENT_LIST_DIR: Şu anda işlenmekte olan liste dosyasının tam dizini. CMake, projenizdeki liste dosyalarını işlerken, bu değişken her zaman şu anda işlenmekte olan liste dosyasının (CMAKE_CURRENT_LIST_FILE) bulunduğu dizine ayarlanacaktır. Değerin dinamik kapsamı vardır. CMake bir kaynak dosyadaki komutları işlemeye başladığında, bu değişkeni bu dosyanın bulunduğu dizine ayarlar. CMake dosyadaki komutları işlemeyi bitirdiğinde, önceki değeri geri yükler. Bu nedenle, bir makro veya işlev içindeki değişkenin değeri, makroyu veya işlev tanımını içeren dosyanın dizini değil, çağrı yığınındaki en alttaki girdiyi çağıran dosyanın dizinidir.

Bu değişkenler hangi koşullarda farklı değerler taşır?


10
Ve ayrıca basit ve güzelden nasıl farklılar ./?
kyb

Yanıtlar:


139

Değişkenler CMAKE_CURRENT_SOURCE_DIRve CMAKE_CURRENT_LIST_DIR, include komutuyla başka bir dosya tarafından eklenen bir CMake listesi dosyası için farklı dizinlere başvurabilir . Örneğin, CMakeLists.txtbir dizinde a mevcutsa projectve aşağıdaki yönergeyi içeriyorsa

include(src/CMakeLists.txt)

Daha sonra ise src/CMakeLists.txtişleniyor CMAKE_CURRENT_LIST_DIRdeğinecektir project/srcise CMAKE_CURRENT_SOURCE_DIRyine dış dizine işaret project.

CMAKE_CURRENT_LIST_DIRO CMakeLists.txtanda işlenmekte olan dosyanın yanında bulunan şablon dosyaları veya toplu komut dosyaları gibi kaynak dosyalarını bulmanız gerektiğinde kullanışlı olur .


Not: add_subdirectory()Komutu yerine kullanırken, include()davranış farklıdır ve src/CMakeLists.txtişlendiğinde her iki değişken de işaret eder project/src.


42
+1. Ben sadece CMAKE_CURRENT_LIST_DIRher dosyaya değişiklikleri eklemek isterim include(); çağrılmasına gerek yok CMakeLists.txt.
Angew artık SO

2
Burada iyi bir tartışma etkin biçimde nasıl kullanılacağı hakkında CMAKE_CURRENT_LIST_DIRve include(...)projelerinizde.
jmcarter9t

1
Kolayca kafası karışır çünkü dokümanların ima ettiğinden CMAKE_CURRENT_SOURCE_DIRdaha benzerdir CMAKE_SOURCE_DIR.
Malachi

Ve ile add_subdirectory()? Her iki değişken de klasörü işaret edecek mi?
einpoklum

@einpoklum, Evet, ikisi de klasörü gösteriyor,
rjhcnf
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.