I want to generate in cmake a header-only library from header.h, that
depends on libboost_system and filesystem.
I can compile the library without problems with:
find_package(Boost COMPONENTS
system filesystem
REQUIRED)
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
add_library(mylib SHARED header.h)
target_link_libraries(mylib PUBLIC ${Boost_LIBRARIES})
set_target_properties(mylib PROPERTIES LINKER_LANGUAGE CXX)
But when I link to mylib elsewhere, it fails finding the boost library with a
ld error.
The failure makes sense, but I don't know how to solve it in CMake.
How do I "store" the boost dependency on mylib? So I don't have to worry
about finding the boost library in other external project?
I am using cmake 3.2
When I use it in other project, the linker is not able to find the boost
library:
target_link_libraries(newproject.exe ${external_mylib})
undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/PATH/TO/libboost_system-mt-d.so.1.57.0: error adding symbols: DSO missing from
command line
collect2: error: ld returned 1 exit status
It is solved if I explicitly link again to the Boost_LIBRARIES.
target_link_libraries(newproject.exe ${external_mylib} ${Boost_LIBRARIES))
This doesn't avoid finding again the boost_libraries, maybe the
solution is to put the boost_libraries in the environment variable
LD_LIBRARY_PATH?
Can I avoid relinking to boost somehow?
--
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