cmake 3.13.2: Problem with FindBoost.cmake/FIND_LIBRARY()
Dear cmake developers,
I am configuring a simple build system using cmake-3.13.2 such that it can link to boost-1.69.0:
SET(BOOST_ROOT "/mnt/NAS2/Library_Repository/Linux/64/Release/Intel_18/boost-1.69.0")
SET(BOOST_INCLUDEDIR "${BOOST_ROOT}/include")
SET(BOOST_LIBRARYDIR "${BOOST_ROOT}/lib")
SET(Boost_NO_BOOST_CMAKE ON)
MESSAGE(STATUS "CMAKE_CXX_COMPILER_ARCHITECTURE_ID=${CMAKE_CXX_COMPILER_ARCHITECTURE_ID}")
SET(CMAKE_CXX_COMPILER_ARCHITECTURE_ID "x64")
# this is overridden by FindBoost.cmake anyway!
#SET(CMAKE_FIND_LIBRARY_SUFFIXES .a .lib .so "")
IF(WIN32)
SET(Boost_COMPILER "-iw")
ELSE()
SET(Boost_COMPILER "-il")
ENDIF()
SET(Boost_DEBUG ON)
SET(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_DEBUG_LIBS FALSE)
set(Boost_USE_RELEASE_LIBS ON)
SET(Boost_USE_STATIC_RUNTIME ON)
SET(Boost_USE_MULTITHREADED ON)
SET(Boost_NAMESPACE "libboost")
SET(Boost_ARCHITECTURE "-x64")
set(Boost_ADDITIONAL_VERSIONS "1.69" "1.69.0")
find_package (Boost 1.69.0 REQUIRED COMPONENTS filesystem system thread)
IF(Boost_FOUND)
MESSAGE(STATUS "Found Boost:\n\t${Boost_INCLUDE_DIRS}\n\t${Boost_LIBRARIES}")
INCLUDE_DIRECTORIES(BEFORE ${Boost_INCLUDE_DIRS})
ELSE(Boost_FOUND)
MESSAGE(FATAL_ERROR "Boost not found: ${Boost_ERROR_REASON}")
ENDIF(Boost_FOUND)
I see things like these:
-- [ /home/fnatter/Downloads/cmake-3.13.2-Linux-x86_64/share/cmake-3.13/Modules/FindBoost.cmake:1811 ] Searching for FILESYSTEM_LIBRARY_RELEASE: libboost_filesystem-il-mt-s-x64-1_69;libboost_filesystem-il-mt-s;libboost_filesystem-mt-s-x64-1_69;libboost_filesystem-mt-s;libboost_filesystem-mt;libboost_filesystem
which looks good since my "/mnt/NAS2/Library_Repository/Linux/64/Release/Intel_18/boost-1.69.0/lib" looks like:
- [...]
- libboost_filesystem-il-mt-sd-x64-1_69.a
- libboost_filesystem-il-mt-s-x64-1_69.a
- [...]
Unfortunately, FindBoost.cmake cannot find the libraries (filesystem, system, thread), because it cannot match the ".a", despite the fact that FindBoost.cmake sets SET(CMAKE_FIND_LIBRARY_SUFFIXES .a) internally (and I verified that it is still set in _Boost_FIND_LIBRARY()).
I can make it work by changing line 1785 from:
${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}
to:
${Boost_LIB_PREFIX}${Boost_NAMESPACE}_${component}${compiler}${_boost_MULTITHREADED}${_boost_RELEASE_ABI_TAG}${_boost_ARCHITECTURE_TAG}-${Boost_LIB_VERSION}.a
So we tried using find_library directly in the (toplevel) CMakeLists.txt:
SET(CMAKE_FIND_LIBRARY_SUFFIXES .a)
find_library(MY_BOOST NAMES "libboost_system-il-mt-s-x64-1_69" HINTS "/mnt/NAS2/Library_Repository/Linux/64/Release/Intel_18/boost-1.69.0/lib")
which does NOT find it, but when using "libboost_system-il-mt-s-x64-1_69.a" directly, it is found:
find_library(MY_BOOST NAMES "libboost_system-il-mt-s-x64-1_69.a" HINTS "/mnt/NAS2/Library_Repository/Linux/64/Release/Intel_18/boost-1.69.0/lib")
Could you please help me fix this?
Many Thanks and Best Regards,
Felix