2012-04-04 98 views
6

我有一個大型的跨平臺項目,需要在各個地方構建;在某些地方,可能有不同的UI工具包,聲音API等,我試圖找出自動配置基於哪些庫存在配置哪些目標的最佳方法。基於圖書館存在有條件的CMake構建目標

我想要操作的代碼,例如:

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() 

然而,在我建立這個不具有libGLESv2可用的系統上的情況下,我得到的錯誤:

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文檔意味着變量PC_EGL_NOTFOUND應該被設置,但它不是(CMake 2.8.5)。那麼,使用find_library來確定一個目標是否應該存在的適當方法是什麼?這似乎是使用

if (NOT PC_EGL MATCH "-NOTFOUND") 

是有點脆弱和繁瑣,所以有用於基於wheter庫被發現在所有CMake的一個命令路徑更好的機制?

回答

9

它只是

if(PC_EGL AND PC_GLESv2 AND PC_GLESv2) 

CMake的治療0FALSEOFFANYTHING-NOTFOUND爲假。

+0

謝謝!這看起來應該很容易在文檔或例子中找到,這是我用CMake的一個常見問題 - 一旦我知道如何做一些簡單的事情,但是找到如何做,而不是那麼多。 – fluffy 2012-04-04 17:44:09