On 02/29/2016 03:34 PM, Patrick Boettcher wrote:
Hi list,
I came across the INTERFACE-type of libraries when writing a
FindModule.cmake-file for custom libraries installed by my
project.
Here is what I'm doing after having found the libraries and the
determined the paths: LIB1 is the library and LIB1_INCLUDE_DIRS its
include-dirs:
add_library(name INTERFACE)
target_link_libraries(name INTERFACE ${LIB1})
if(FFTW3_FOUND)
target_include_directories(name INTERFACE
{$FFTW3_INCLUDE_DIRS})
target_link_libraries(name INTERFACE ${FFTW3_LIBRARIES} )
endif()
target_include_directories(name INTERFACE ${LIB1_INCLUDE_DIRS})
# need c++11 compile options for if-name
set_property(TARGET name PROPERTY
INTERFACE_COMPILE_FEATURES cxx_range_for)
This makes that in the CMakeLists.txt which includes my package-file a
user needing libname for his executable does:
add_executable(main main.cpp)
target_link_libraries(main name)
This will
1) set C++11 flags for compilation
2) set the right include-pathes
3) link with the right libraries as per my order
Awesome. But is this a good practice? Are there any pitfalls?
This sounds like a use case for IMPORTED rather than INTERFACE libraries.
INTERFACE libraries can be IMPORTED as well but are not intended for
pre-build linkable libraries (which you seem to have).
This documents how to create find modules with IMPORTED targets:
https://cmake.org/cmake/help/v3.4/manual/cmake-developer.7.html#find-modules
Nils
--
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