Hello cmake-experts,
I am working on a project that uses a third-party library delivered in
binary form (TeamSpeak 3 SDK). My project is supposed to build on Win,
Linux, and OSX, so I decided to use cmake as a build tool. I have
started work on a Findts3sdk.cmake (find_package() in module mode) to
let cmake detect the library in the CMAKE_PREFIX_PATH on any of my
machines - file attached at the end of this mail.
My (current) problem is that a call to find_path() in my
Findts3sdk.cmake will not pick up the bin directory containing the
libraries, while another call did work to find the include directory.
WORKS (ts3sdk_INCLUDE_DIR == /path/to/ts3_sdk_3.0.3/include):
> find_path(ts3sdk_INCLUDE_DIR NAMES clientlib.h HINTS
> ${CMAKE_PREFIX_PATH}/include)
BROKEN (ts3sdk_LIBRARY_DIR == ts3sdk_LIBRARY_DIR-NOTFOUND):
> find_path(ts3sdk_LIBRARY_DIR NAMES libts3client_mac.dylib HINTS
> ${CMAKE_PREFIX_PATH}/bin)
I deduce from this that CMAKE_PREFIX_PATH is set correctly. I have tried
the broken command with other names of the library file as well
(ts3client_mac, libts3client_mac, libts3client_mac.dylib,
ts3client_mac.dylib).
What do I have to fix to make find_path() pick up the library file?
I am currently on a Mac, using cmake 3.1.3 installed from MacPorts.
cmake is called with -DCMAKE_PREFIX_PATH="/path/to/ts3_sdk_3.0.3".
The layout of the library delivery is as follows:
> ts3_sdk_3.0.3
> ├── bin
> │ ├── libts3client_linux_amd64.so
> │ ├── libts3client_linux_x86.so
> │ ├── libts3client_mac.dylib
> │ ├── libts3server_freebsd_amd64.so
> │ ├── libts3server_freebsd_x86.so
> │ ├── libts3server_linux_amd64.so
> │ ├── libts3server_linux_x86.so
> │ ├── libts3server_mac.dylib
> │ ├── soundbackends
> │ ├── ts3client_win32.dll
> │ ├── ts3client_win64.dll
> │ ├── ts3server_win32.dll
> │ └── ts3server_win64.dll
> ├── include
> │ ├── clientlib.h
> │ ├── clientlib_publicdefinitions.h
> │ ├── public_definitions.h
> │ ├── public_errors.h
> │ ├── serverlib.h
> │ └── serverlib_publicdefinitions.h
> └── lib
> ├── ts3client_win32.lib
> ├── ts3client_win64.lib
> ├── ts3server_win32.lib
> └── ts3server_win64.lib
My current Findts3sdk.conf looks as follows:
> # Find the INCLULDE and LIBRARY path
> find_path(ts3sdk_INCLUDE_DIR NAMES clientlib.h HINTS
> ${CMAKE_PREFIX_PATH}/include)
>
> if (WIN32)
> set(ts3sdk_client_LIBRARIES ts3client_win32 ts3client_amd64)
> set(ts3sdk_server_LIBRARIES ts3server_win32 ts3server_amd64)
> elseif (APPLE)
> set(ts3sdk_client_LIBRARIES ts3client_mac)
> set(ts3sdk_server_LIBRARIES ts3server_mac)
> elseif (UNIX)
> set(ts3sdk_client_LIBRARIES ts3client_linux_x86 ts3client_linux_amd64)
> set(ts3sdk_server_LIBRARIES ts3server_linux_x86 ts3server_linux_amd64)
> endif()
>
> #find_path(ts3sdk_LIBRARY_DIR NAMES ${ts3sdk_client_LIBRARIES} HINTS
> ${CMAKE_PREFIX_PATH}/bin)
> find_path(ts3sdk_LIBRARY_DIR NAMES ts3client_mac.dylib HINTS
> ${CMAKE_PREFIX_PATH}/bin)
> #find_path(ts3sdk_LIBRARY_DIR NAMES ${ts3sdk_client_LIBRARIES}
> ${ts3sdk_server_LIBRARIES} HINTS ${CMAKE_PREFIX_PATH}/bin)
>
> # Combine into output information
> set(ts3sdk_INCLUDE_DIRS ${ts3sdk_INCLUDE_DIR})
> set(ts3sdk_LIBRARY_DIRS ${ts3sdk_LIBRARY_DIR})
>
> message(STATUS "ts3sdk headers found in " ${ts3sdk_INCLUDE_DIRS})
> message(STATUS "ts3sdk libraries used: " ${ts3sdk_client_LIBRARIES})
> message(STATUS "ts3sdk libraries found in " ${ts3sdk_LIBRARY_DIR})
Regards,
Damian Philipp
--
Powered by www.kitware.com
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Kitware offers various services to support the CMake community. For more
information on each offering, please visit:
CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake