2013-06-24 2 views
1

Кажется, cmake не может определить, какие библиотеки можно использовать с текущим компилятором, или, скорее, я хочу, чтобы cmake использовал только библиотеки, которые были скомпилированы с тем же компилятором.Ссылка на внешнюю библиотеку CMake?

Я использую find_library для поиска нужных библиотек, но, похоже, он не может определить, действительно ли библиотека используется. Ему удалось найти библиотеку по имени, но она использовала расширение «.lib», когда я делал конфигурацию для MinGW. Должен ли я создавать папки для каждого компилятора, для компиляции библиотек и добавления операторов if для каждого компилятора в моем скрипте? Это просто похоже на интуицию, на что я полагал, что find_library будет способна. Возможно, я злоупотребляю им? У кого-нибудь есть лучшие идеи?

ответ

2

Кажется, вы немного смущены: вы правы, когда предлагаете вам использовать разные библиотеки для MinGW и Visual Studio в Windows. Но вы ошибаетесь, говоря, что файлы .lib не могут быть использованы MinGW. Как Visual Studio, так и MinGW используют файлы .lib для связи с библиотеками в Windows.

Цель команды find_library - найти библиотеки. Ничего больше, поэтому он выполняет свою работу здесь.

Если вы хотите, чтобы убедиться, что библиотеки, найденные могут быть использованы вашим компилятором, вы должны проверить, что эти библиотеки могут быть использованы компилятор с помощью try_compile:

find_library(YOURLIB_LIBRARY yourlib) 
if (YOURLIB_LIBRARY) 
    try_compile(YOURLIB_WORKS 
     bindir 
     somefile.c 
     LINK_LIBRARIES ${YOURLIB_LIBRARY}) 
    if (YOURLIB_WORKS) 
     # do something with your library 
    else() 
     # warn the user of stop the configuration process 
    endif() 
endif() 
+0

Спасибо за ответ , вы меньше всего отвечаете на некоторые из моих вопросов. Мне было больше интересно, если вы создаете 64-битный исполняемый файл, тогда CMake автоматически изменит любые каталоги с «/ lib /» на «/ lib64 /», если у вас есть переменная 'FIND_LIBRARY_USE_LIB64_PATHS', я думаю, что это так. – johndoe

+0

Он делает это, но только на «платформах, которые, как известно, нуждаются в нем», я не могу проверить это прямо сейчас, но я уверен, что Windows не входит в этот список платформ (так как стандартного расположения для библиотек в Windows нет в любом случае ...) – Guillaume

+0

Accidentially нажал ввод и он отвечал ... только разрешено редактировать в течение 5 минут так: 'если (MSVC) find_library (MYLIB_LIBRARY MyLib Paths "/ Lib предварительно построенной-MSVC/MYLIB /" ELSEIF (MinGW) # гм не уверен, как проверить компилятор (кажется, предназначено только для MSVC ...) find_library (MYLIB_LIBRARY MyLib ПУТЕЙ "прекомпилированного/Lib-MinGW/MyLib /" ENDIF() ' Вместо того, писать, если sta для каждого компилятора (какой idk кажется, что вокруг есть способ проверить их; по крайней мере, я видел сравнения строк для идентификатора компилятора, которые могут измениться), если кто-то знает лучший способ проверки complrs – johndoe