[CMake] Faking a library
Alexander Neundorf
a.neundorf-work at gmx.net
Wed Oct 16 17:36:53 EDT 2013
On Wednesday 16 October 2013, Magnus Therning wrote:
> When defining a library via add_library() it's possible to link
> against it by just putting its name into target_link_libraries(). Is
> there some way of wrapping up an external library in a similar way?
>
> As a concrete example I'm playing around with gtest[1] via
> externalproject_add() like this:
>
> externalproject_add(gtest
> SOURCE_DIR ${PROJECT_SOURCE_DIR}/gtest
> BINARY_DIR gtest-build
> INSTALL_COMMAND "" # omit installation
> )
>
> Then to link to it I need to use
>
> target_link_libraries(test
> -L${CMAKE_BINARY_DIR}/gtest-build -lgtest -lpthread
> )
>
> Is there some way to wrap that all up in a target that I can pass
> straight to target_link_libraries()?
>
> Or is my only option to create a variable that expands to those
> compiler flags?
You may create an imported target, and set some properties on it:
add_library(gtest STATIC IMPORTED)
set_target_properties(gtest PROPERTIES
IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/libgtest-build.a)
You may need to set a few more properties like
IMPORTED_LINK_INTERFACE_LIBRARIES, and you may want to use
"${CMAKE_STATIC_LIBRARY_PREFIX}libgtest-build.${CMAKE_STATIC_LIBRARY_SUFFIX}"
instead of hardcoding "lib" and "a".
Alex
More information about the CMake
mailing list