2012-04-04 12 views
6

Çeşitli yerlerde inşa edilmesi gereken büyük bir çapraz platform projem var; bazı yerlerde farklı UI araç takımları, ses API'ları, vb. kullanılabilir ve hangi kütüphanelerin var olduğuna bağlı olarak hangi hedeflerin yapılandırılacağını otomatik olarak yapılandırmanın en iyi yolunu bulmaya çalışıyorum.CMake bina hedefleri koşullu olarak kütüphane varlığına dayalı

Bunun için çalışıyorum kod örneğin geçerli:

find_library(PC_EGL EGL) 
find_library(PC_GLESv2 GLESv2) 
find_library(PC_Xxf86vm Xxf86vm) 
if (DEFINED PC_EGL AND DEFINED PC_GLESv2 AND DEFINED PC_Xxf86vm) 
    add_executable(foo foo.cpp) 
    target_link_libraries(foo ${PC_EGL} ${PC_GLESv2} ${PC_Xxf86vm}) 
endif() 

Ancak, libGLESv2 mevcut olmayan bir sistemde bu inşa durumda, ben hata alıyorum:

CMake Error: The following variables are used in this project, but they are set to NOTFOUND. 
Please set them or make sure they are set and tested correctly in the CMake files: 
PC_GLESv2 
    linked by target "foo" in directory /path/to/platform 

Find_library belgeleri, PC_EGL_NOTFOUND değişkeninin ayarlanması gerektiğine işaret eder, ancak bu (CMake 2.8.5). Öyleyse, bir hedefin var olup olmayacağını belirlemek için find_library'i kullanmanın uygun yolu nedir? O kadar bir kütüphane her yerinde bulundu wheter dayalı bir CKağıt komut yolunu belirlemek için daha iyi bir mekanizma yoktur,

if (NOT PC_EGL MATCH "-NOTFOUND") 

biraz kırılgan ve keman olduğu kullanarak gibi görünüyor?

cevap

9

Bu basit bir şekilde

if(PC_EGL AND PC_GLESv2 AND PC_GLESv2) 

CKağıt 0, FALSE, OFF, ANYTHING-NOTFOUND olarak yanlış davranır.

+0

Teşekkürler! Bu, CMake ile ortak bir sorun olan belgelerinde veya örneklerde bulunması kolay olmuş gibi görünüyor - bir kez nasıl kolay bir şey yapılacağını bildiğimi, ancak nasıl yapacağınızı bulmayı çok fazla değil. – fluffy