Como vincular a versão PIC da dependência de uma biblioteca no CMake?

CMake:

Nós temos uma dependência decpp-netlib.

Criamos a partir da fonte como parte do nosso sistema de compilação.

cpp-netlib/CMakeLists.txt:

add_library(cpp-netlib
    STATIC
    ${SRCS})

Para um caso de uso específico, precisamos usá-lo em uma biblioteca compartilhada, então criei uma segunda biblioteca com-fPIC ativado:

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

No destino da minha biblioteca compartilhada, vinculo-olibcpp-netlib_pic.a

foo/CMakeLists.txt:

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

Estou recebendo um erro de vinculador de volta porquecpp-netlib está tentando vincular a versão não-pic doboost_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

Nome desmembrado:

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

Boost Build:

Isso tudo faz parte da migração do nosso sistema de compilação existente do boost-build para o CMake.

O Jamfiles de build-boost funciona bem.

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
;

Isso funciona.

Note que não há menção deboost::network em qualquer lugar, embora exista uma subpasta nacpp-netlib/boost/library, mas contém apenas cabeçalhos.

Pergunta, questão:

Como digo ao CMake quecpp-netlib_pic precisa usar a versão pic deboost_network?

questionAnswers(1)

yourAnswerToTheQuestion