2015-02-15 14 views
6

cmake'de, bir dize belirtecinin başka bir dizeye dahil olup olmadığını nasıl kontrol edebilirim?cmake dize belirteci eklenmesi denetimi

Durumumda, derleyicinin adının "Clang" dizesini içerip içermediğini (ör. "Clang", "AppleClang", ...) bilmek isterim. Şimdiye kadar yapabileceği tek şey: Bir alt dize olup olmadığını kontrol gibi daha esnek bir yaklaşım istiyoruz

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 
... 
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") 
... 

.

(regex MATCHES) doğru değerini alır verilen dize veya değişkenin değeri verilen normal ifadeyi eşleşirse:

Bu benim belgelerinde bulabildiğim budur.
(LESS) Belirtilen dize veya değişkenin değeri geçerli bir sayıysa ve sağdaki değerden daha azsa doğrudur.
(GREATER) Belirtilen dizge veya değişkenin değeri geçerli bir sayıysa ve sağdaki değerden daha büyükse True.
(EQUAL) Belirtilen dize veya değişkenin değeri geçerli bir sayıysa ve sağdaki sayıya eşitse True.
(STRLESS) Belirtilen dizge veya değişkenin değeri, sağdaki dize veya değişkenden sözlükbilimsel olarak küçükse doğrudur.
(STRGREATER) Belirtilen dize veya değişkenin değeri, sağdaki dize veya değişkenden sözcükbilimsel olarak daha büyükse doğrudur.
(STREQUAL) Belirtilen dize veya değişkenin değeri, sağdaki dize veya değişkene eşittir. Muhtemelen aradığınız şey olacaktır.

+0

biri listelenen son cevap olacak, ama aradığınız simge ve aradığınız dizgenin açık bir örneği olmadan, kimse sizi daha yakından yönlendiremeyecektir. – kdopen

cevap

7

if(<variable|string> MATCHES regex). Bu özel durumda

o zaman değiştirebilirsiniz (Eğer Clang ve AppleClang için bloğun içine aynı şeyi yapıyoruz varsayarak):

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 
... 
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang") 
... 

ile: yaklaşımların

if(CMAKE_CXX_COMPILER_ID MATCHES "^(Apple)?Clang$") 
+0

Yapmam gerekenler için, bu iyi çalışıyor: "(CMAKE_CXX_COMPILER_ID MATCHES" Clang ") – Pietro

+0

ve ilk olarak büyük veya küçük harf olabildiği için:" if (CMAKE_CXX_COMPILER_ID MAÇ "(C | c?) Lang") ' – Pietro

+4

@Pietro Bu, hatalı belgelenmiş olsa da, ayrıştırılmış dizede aranan dize * bulunan * olduğunda MATCHES doğru döner. Bu, en azından benim deneyimim, birkaç durumda test edildi, ama yine de belgeleme bu yönüyle açık olmaktan uzaktır. – Antonio