Home CMake build fails unless pthread is called on the target_link_directories() command
 I have a linking issue with CMake 3.10 and Boost 1_66_0. I'm using the asio async timer tutorial for testing as I prepare to do some networking. I'm on a bleeding edge Linux maching working on a project that required me to install Boost into a custom directory: /home/myuser/boost/boost_1_66_0  I set the following environment variables in my .bash_profile: export BOOST_ROOT=/home/myuser/boost/boost_1_66_0 export BOOST_LIBRARYDIR=/home/myuser/boost/boost_1_66_0/stage/lib  Although I managed to get this working, the build fails unless pthread is called on the target_link_libraries() command, even though I am calling Boost's own thread library on the find_package() command. I did not find any mention of the need to call pthread in Boost's getting started guide, or in CMake's documentation. Here is my full CMakeLists.txt file:  1 cmake_minimum_required(VERSION 3.0) 2 project(asio_tut) 3 set(Boost_DEBUG ON) 4 5 if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 6 set(CMAKE_INSTALL_PREFIX=/home/myuser/projects/asio_tut/build CACHE PATH test FORCE) 7 endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) 8 9 find_package(Boost REQUIRED COMPONENTS system thread) 10 11 if(Boost_FOUND) 12 include_directories(${Boost_INCLUDE_DIR}) 13 add_executable(asio_tut timer_async.cpp) 14 target_link_libraries(asio_tut${Boost_LIBRARIES}) 15 endif()  CMake finds the thread library: -- [ /home/myuser/builds/cmake/share/cmake-3.10/Modules/FindBoost.cmake:1767 ] Boost_FOUND = 1 -- Boost version: 1.66.0 -- Found the following Boost libraries: -- system -- thread -- chrono -- date_time -- atomic -- Configuring done -- Generating done -- Build files have been written to: /home/myuser/projects/asio_tut/build  But then it fails on the proceeding make command as it insists on pthread: [myuser@linux build]$make Scanning dependencies of target asio_tut [ 50%] Building CXX object CMakeFiles/asio_tut.dir/timer_async.cpp.o [100%] Linking CXX executable asio_tut /usr/bin/ld: CMakeFiles/asio_tut.dir/timer_async.cpp.o: undefined reference to symbol 'pthread_condattr_setclock@@GLIBC_2.3.3' /usr/lib/libpthread.so.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status make[2]: *** [CMakeFiles/asio_tut.dir/build.make:100: asio_tut] Error 1 make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/asio_tut.dir/all] Error 2 make: *** [Makefile:84: all] Error 2  To fix this I had to add pthread to the targe_link_libraries() command: target_link_libraries(asio_tut${Boost_LIBRARIES} pthread)  Is this normal? Will this come back to haunt me later on? Will it cause any problems with portability? Should I just ignore it? My CMakeCache.txt file shows that CMake found all of my Boost libraries and headers in the custom directories. I won't include the entire cache file, but I examined the cache entries and they are correct. Side Point Not sure if this is related but I did get one warning during the CMake build about my Boost version as it is bleeding edge: CMake Warning at /home/myuser/builds/cmake/share/cmake-3.10/Modules/FindBoost.cmake:801 (message): New Boost version may have incorrect or missing dependencies and imported targets