2015-02-19 21 views
6

Komut satırı üzerinden bir yapılandırma değişkeni ayarlamakta sorun yaşıyorum. Ben sistemden belirleyemez, bu yüzden kullanıcı belirtmek için bekliyoruz:Toolchain Dosyası'nda CMake Önbelleği Değişkenini Kontrol Edin

cmake -DCMAKE_TOOLCHAIN_FILE=../android.toolchain -DANDROID_ABI:STRING="arm64" .. 

benim android.toolchain İçerde, ben şu var:

message(STATUS "Android ABI: ${ANDROID_ABI}") 
if("${ANDROID_ABI}" STREQUAL "") 
    message(FATAL_ERROR "Please specifiy ABI at cmake call -DANDROID_ABI:STRING=armeabi or -DANDROID_ABI:STRING=arm64") 
endif() 

olursa olsun, bu satırda başarısız neyi

-- Android ABI: arm64 
CMake Error at yaml-cpp/android.toolchain:45 (message): 
Please specifiy ABI at cmake call -DANDROID_ABI:STRING=armeabi or -DANDROID_ABI:STRING=arm64 

kimse bana yanlış yapıyorum doğrudan Could: BİLE doğru arm64 yazdırır OLSA?


Bunu ilgisi var düşünüyorum:

  • -D yerine normal bir değişkenin Bu araç zinciri dosyasında olduğunu
  • bir önbellek değişkeni ekler ... önbellek değişkenleri göz ardı etmek gibi görünüyor

Herhangi bir fikir veya öneriniz var mı? Burada tamamen perde arkasında neler olup bittiğini anlıyormuş gibi, ama yok

+0

deneyin 'if (DEĞİL ANDROID_ABI) ...'. – sakra

+0

Geliştiricilerin biri, global özelliklerin iyi bir geçici çözüm olabileceğini önerir: https://gitlab.kitware.com/cmake/cmake/issues/16170#note_135718 – Michael

cevap

4

benim için çalışan bir çözüm var:

# Problem: CMake runs toolchain files multiple times, but can't read cache variables on some runs. 
# Workaround: On first run (in which cache variables are always accessable), set an intermediary environment variable. 

if (FOO) 
    # Environment variables are always preserved. 
    set(ENV{_FOO} "${FOO}") 
else() 
    set(FOO "$ENV{_FOO}") 
endif() 
+0

Sahne arkasında: * cmake * derleyiciyi veya derleyici seçenekleri ve bu durumda önbellek değişkenleri okunmadan toolchain dosyası kullanır. Çözümünüz iyi bir çözüm gibi görünüyor – avtomaton