Как проверить, нашел ли CMake библиотеку с find_library

Я нахожу библиотеку с функцией find_library

find_library(MY_LIB lib PATHS ${MY_PAHT})

Если библиотека найдена, ${MY_LIB} укажет на правильное местоположение. Если библиотека не найдена, ${MY_LIB} будет MY_LIB-NOTFOUND.

Но как я могу это проверить?

if(${MY_LIB} EQUAL 'MY_LIB-NOTFOUND') 
    ...
endif()

всегда оценивает значение false.

Ответ 1

Вы можете просто проверить переменную как таковую, например:

find_library(LUA_LIB lua)
if(NOT LUA_LIB)
  message(FATAL_ERROR "lua library not found")
endif()

Пример вывода:

CMake Error at CMakeLists.txt:99 (message):
  lua library not found


-- Configuring incomplete, errors occurred!

Обратите внимание, что мы используем

if(NOT LUA_LIB)

а не

if(NOT ${LUA_LIB})

из-за различной семантики.

С ${} переменная LUA_LIB заменяется до if(). В виде часть оценки контент затем будет интерпретироваться как имя переменной, если он не соответствует определению константы. И это не то, что мы хотим.

Ответ 2

Просто сделайте

if(MY_LIB)
    #found
    ...
else()
    #not found
    ...
endif()