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