2009-04-16 5 views
4

Я установил LIBRARY_SEARCH_PATHS к /opt/local/lib, и проверить, что библиотека в вопросе есть (я ссылка на GLEW):Почему Xcode не распознает мои LIBRARY_SEARCH_PATHS?

$ls /opt/local/lib 

libGLEW.1.5.1.dylib libfreetype.a  libz.a 
libGLEW.1.5.dylib libfreetype.dylib libz.dylib 
libGLEW.a  libfreetype.la  pkgconfig 
libGLEW.dylib  libz.1.2.3.dylib 
libfreetype.6.dylib libz.1.dylib 

но Xcode дает мне ошибку компоновщика

library not found for -lGLEW 

I создавая проект Xcode с помощью CMake, поэтому я не хочу явно изменять проект Xcode (если кто-то предлагает добавить его как фреймворк или что-то в этом роде). Xcode распознает USER_HEADER_SEARCH_PATHS штраф (как в this question); почему он здесь не работает?

ответ

2

Возможно, что-то похожее на ваш CMakeLists.txt?

find_library(GLEW_LIB GLEW /opt/local/lib) 
if(NOT ${GLEW_LIB}) 
    message(FATAL_ERROR "Could not find GLEW") 
endif() 
target_link_libraries(myprogram ${GLEW_LIB} ...) 

Где myprogram - это имя целевого исполняемого файла, которое необходимо связать с библиотекой. Вы заменили бы ... другими библиотеками, которые вы используете в этом исполняемом файле.

Этот способ CMake будет обрабатывать детали библиотеки для вас.

1

Xcode работает с потенциально несколькими SDK, поэтому всякий раз, когда вы определяете эти вещи (например, HEADER_SEARCH_PATHS или LIBRARY_SEARCH_PATHS), текущий корень SDK добавляется к фактическому пути, который передается компоновщику.

Итак, одним из способов сделать эту работу было бы добавить ваш каталог в SDK. Например, предположим, вы строите с Mac OS X 10.5 SDK, вы можете добавить ваш выбор реж:

ln -s /opt /Developer/SDKs/MacOSX10.5.sdk/opt 

Ваша библиотека будет в настоящее время находится в вашей системе.

Если вы не хотите этого делать, вам придется взглянуть на CMake и узнать, как заставить его генерировать библиотечное требование для вашей фактической библиотеки (я ничего не знаю о CMake, поэтому я не может вам помочь). Вот почему вы видите разницу между USER_HEADER_SEARCH_PATHS и HEADER_SEARCH_PATHS на ваш другой вопрос.

В качестве другого варианта, можно также указать этот путь с OTHER_LDFLAGS построить переменную:

OTHER_LDFLAGS=-L/opt/local/lib 

Это вызывает компоновщик для поиска/Opt/местные/Библиотека, а также его стандартные пути и не будет требуется создать другой файл проекта.