MathGL и FLTK cmake в Mac OS X: не найдены символы

У меня проблемы с получением cmake, чтобы найти и связать необходимые библиотеки для MathGL и FLTK.

Linking CXX executable filter.app/Contents/MacOS/filter
Undefined symbols for architecture x86_64:
  "_mgl_create_graph_fltk", referenced from:
      _main in filter.cpp.o
  "_mgl_fltk_thr", referenced from:
      _main in filter.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я использую стандартный скрипт FLTK Finder cmake, который поставляется с готовым CMake 3.0.2 на OS X.

Вот соответствующие части моего CMakeLists.txt:

find_package(MathGL 2.2 REQUIRED)
include_directories(${MATHGL2_INCLUDE_DIRS})

find_package(FLTK REQUIRED)
include_directories(${FLTK_INCLUDE_DIR})
#link_directories(${FLTK_LIBRARIES}) # tried it with and without this line

add_executable(filter ${BUNDLE_MODE} src/filter.cpp)

target_link_libraries(
  filter
  ${MATHGL2_LIBRARIES}
  ${FLTK_LIBRARIES}
  ${OPENGL_LIBRARIES}
)

Если я раскомментирую link_directories линия, я получаю дополнительную ошибку:

CMake Warning (dev) at CMakeLists.txt:73 (link_directories):
  This command specifies the relative path

    -framework Carbon -framework Cocoa -framework ApplicationServices -lz

  as a link directory.

  Policy CMP0015 is not set: link_directories() treats paths relative to the
  source dir.  Run "cmake --help-policy CMP0015" for policy details.  Use the
  cmake_policy command to set the policy and suppress this warning.

Кажется, что он пытается сделать -L-framework Carbonи т. д., когда они уже связаны через BUNDLE_MODE вар в add_executable, Я подозреваю, что это FindFLTK2.cmake не был должным образом протестирован на OS X, и я не совсем уверен, как это исправить.

Кто-нибудь может предложить простое исправление?

1 ответ

Решение

Нашел проблему. Кажется, что инструкции в обоих FindMathGL.cmake а также FindMathGL2.cmake были неверны. Вот исправленный набор команд cmake. Это также работает для Qt, а не только для FLTK.

find_package(MathGL2 REQUIRED COMPONENTS FLTK) # or Qt instead of FLTK
include_directories(${MATHGL2_INCLUDE_DIRS})

add_executable(filter ${BUNDLE_MODE} src/filter.cpp) # leave out BUNDLE_MODE if not on Darwin

target_link_libraries(
  filter
  ${MATHGL2_LIBRARIES}
  ${OPENGL_LIBRARIES}
)

Намного легче.

Другие вопросы по тегам