Üzerine yazmayın CMAKE_C_COMPILER
, cmake'yi çağırmadan önce dışa aktarın CC
(ve CXX
):
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
cmake /path/to/your/project
make
Dışa aktarmanın yalnızca bir kez yapılması gerekir, projeyi ilk kez yapılandırdığınızda, bu değerler CMake önbelleğinden okunacaktır.
GÜNCELLEME : CMAKE_C(XX)_COMPILER
Jake'in yorumundan sonra neden geçersiz kılınmadığına dair daha uzun açıklama
CMAKE_C(XX)_COMPILER
Değerin iki ana nedenden dolayı geçersiz kılınmasını önermiyorum : CMake'nin önbelleğiyle iyi oynamayacağı ve derleyici kontrollerini ve araç tespitini bozduğu için.
set
Komutu kullanırken üç seçeneğiniz vardır:
- önbelleksiz, normal bir değişken oluşturmak için
- önbelleğe alınmış bir değişken oluşturmak için
- yapılandırırken önbellek değerini her zaman zorlamak için önbelleği zorla
Bakalım olası üç çağrı için ne olacak set
:
Önbellek olmadan
set(CMAKE_C_COMPILER /usr/bin/clang)
set(CMAKE_CXX_COMPILER /usr/bin/clang++)
Bunu yaparken CMAKE_C(XX)_COMPILER
, aynı isimdeki önbellek değişkenini gizleyen "normal" bir değişken oluşturursunuz. Bu, derleyicinizin artık derleme betiğinizde sabit kodlandığı ve ona özel bir değer veremeyeceğiniz anlamına gelir. Farklı derleyicilerle birden çok derleme ortamınız varsa bu bir sorun olacaktır. Her seferinde farklı bir derleyici kullanmak istediğinizde komut dosyanızı güncelleyebilirsiniz, ancak bu, ilk etapta CMake kullanmanın değerini ortadan kaldırır.
Tamam o zaman önbelleği güncelleyelim ...
Önbellek ile
set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "")
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "")
Bu sürüm sadece "çalışmayacaktır". CMAKE_C(XX)_COMPILER
Bunu zorlamak sürece değişken, önbellekte zaten bu yüzden güncellenmiş almazsınız olduğunu.
Ah ... gücü kullanalım o zaman ...
Önbelleği zorla
set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "" FORCE)
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "" FORCE)
Bu neredeyse "normal" değişken sürümüyle aynıdır, tek fark, değerinizin önbellekte ayarlanacağı ve böylece kullanıcıların görebilmesidir. Ancak herhangi bir değişikliğin üzerine set
komut tarafından yazılacaktır .
Derleyici kontrollerini ve araçlarını kırma
Yapılandırma sürecinin başlarında, CMake derleyicide kontroller gerçekleştirir: Çalışıyor mu? Yürütülebilir dosyalar üretebilir mi? vb Ayrıca, ilgili araçların tespit gibi derleyici kullanır ar
ve ranlib
. Bir betikteki derleyici değerini geçersiz kıldığınızda, "çok geç" olur, tüm kontroller ve tespitler zaten yapılır.
Kullanırken Örneğin, varsayılan derleyici olarak gcc ile benim makinede, set
komutu için /usr/bin/clang
, ar
olarak ayarlanır /usr/bin/gcc-ar-7
. CMake'i çalıştırmadan önce bir dışa aktarma kullanırken, olarak ayarlanır /usr/lib/llvm-3.8/bin/llvm-ar
.
/opt
yerine alternatif gcc sürümünü yüklemenin iyi bir uygulama olduğunu düşünüyorum/usr/local
. Tercihen/opt/gcc-x.y.z
. Bu şekilde, daha yeni bir sürüme ihtiyacınız varsa, öncekini kaldırırken herhangi bir sorun yaşamazsınız.