2016-03-18 4 views
1

Я хочу дополнительно добавить некоторые библиотечные пути в моем файле CMakeLists и способ сделать это, чтобы иметь переменную установить в качестве:Cmake сравнение строк не удается

set(MYLIBDIR "DEFAULT") 

Если пользователь хочет указать пользовательский каталог он изменит его:

set(MYLIBDIR /path/to/dir1 
/path/to/dir2) 

Так что для того, чтобы проверить, если пользователь действительно обеспечила дополнительные каталоги я проверяю:

if(NOT ${MYLIBDIR} STREQUAL "DEFAULT") 
link_directories(${MYLIBDIR}) 
endif() 

Когда я пытаюсь сделать это, я получаю сообщение об ошибке cmake. Есть ли способ объединить все элементы переменной перед сравнением строк?

+1

Не могли бы вы также дать сообщение об ошибке вы получили? Можете ли вы попробовать 'if (NOT MYLIBDIR STREQUAL" DEFAULT ")'? Подробнее см. [Что такое синтаксис CMake для установки и использования переменных?] (Http://stackoverflow.com/questions/31037882/whats-the-cmake-syntax-to-set-and-use-variables) и [CMake сравните с пустой строкой с ошибкой STREQUAL] (http://stackoverflow.com/questions/19982340/cmake-compare-to-empty-string-with-strequal-failed). – Florian

+0

Ошибка: CMake Error на CMakeLists.txt: 264 (если): , если заданные аргументы: «NOT» «/ path/to/dir1» «/ path/to/dir2» «STREQUAL» «ПО УМОЛЧАНИЮ» Неизвестные аргументы указаны ' – user4168715

+0

О, спасибо большое. Я нашел ответ в первой ссылке, на которую вы ссылались. Мне пришлось написать 'if (NOT" $ MYLIBDIR} STREQUAL "DEFAULT") ' – user4168715

ответ

4

Повернувшись мой комментарий в ответ

конкатенации список просто быть достигнуто, помещая кавычки вокруг ссылки на переменную:

if(NOT "${MYLIBDIR}" STREQUAL "DEFAULT") 

будет такой же, как

if(NOT "/path/to/dir1;/path/to/dir2" STREQUAL "DEFAULT") 

Но я бы порекомендовал

if(NOT MYLIBDIR STREQUAL "DEFAULT") 

Для получения дополнительной информации см

Смежные вопросы