¿Cómo vincular con la versión PIC de la dependencia de una biblioteca en CMake?

CMake:

Tenemos una dependencia decpp-netlib.

Lo construimos desde la fuente como parte de nuestro sistema de construcción.

cpp-netlib/CMakeLists.txt:

add_library(cpp-netlib
    STATIC
    ${SRCS})

Para un caso de uso en particular, tenemos que usarlo en una biblioteca compartida, así que he creado una segunda biblioteca con-fPIC habilitado:

add_library(cpp-netlib_pic
    STATIC
    ${SRCS})
set_property(TARGET cpp-netlib_pic PROPERTY POSITION_INDEPENDENT_CODE)

En mi objetivo de biblioteca compartida, luego enlacelibcpp-netlib_pic.a

foo/CMakeLists.txt:

add_library(foo
    SHARED
    ${SRCS})
target_link_libraries(foo cpp-netlib_pic)

Recibo un error de vinculador porquecpp-netlib está intentando vincular contra la versión no pic deboost_network

/usr/bin/ld: ../third_party/cpp-netlib/libcpp-netlib_pic.a(client.cpp.o): \
    relocation R_X86_64_32 against `_ZTVN5boost7network4http4impl15normal_delegateE' \
    can not be used when making a shared object; recompile with -fPIC

Nombre desmanchado:

$ c++filt _ZTVN5boost7network4http4impl15normal_delegateE
vtable for boost::network::http::impl::normal_delegate

Mejora de construcción:

Todo esto es parte de la migración de nuestro sistema de compilación existente de boost-build a CMake.

Los Jamfiles boost-build funcionan bien.

Jamroot:

variant pic : release : <cxxflags>-fPIC ;

cpp-netlib/Jamfile:

lib cpp-netlib 
: [ glob src/*.cpp ]
;

foo/Jamfile:

shared-lib foo
: [ glob *.cpp ]
  /ext/cpp-netlib//cpp-netlib/<variant>pic
: <link>shared
  <cxxflags>-fPIC
;

Esto funciona.

Tenga en cuenta que no hay mención deboost::network en cualquier lugar, aunque hay una subcarpeta encpp-netlib/boost/library, pero solo contiene encabezados.

Pregunta:

¿Cómo le digo a CMake quecpp-netlib_pic necesita usar la versión pic deboost_network?

Respuestas a la pregunta(1)

Su respuesta a la pregunta