Eu descobri pelo menos 3 maneiras de fazer isso e estou me perguntando qual é a forma idiomática. Isso precisa ser feito quase universalmente em qualquer biblioteca estática. Estou surpreso que o gerador Makefile no CMake não adiciona isso automaticamente às bibliotecas estáticas. (a menos que esteja faltando alguma coisa?)
target_compile_options(myLib PRIVATE -fPIC)
add_compile_options(-fPIC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fpic")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")
Eu acredito que também pode haver outras variações. (por favor, edite minha pergunta se você encontrar uma)
Se você souber a resposta a esta pergunta, também sabe se há uma maneira de fazer com que um projeto CMake de terceiros seja compilado com este sinalizador sem modificar seu arquivo CMakeLists.txt? Eu encontrei bibliotecas estáticas sem esse sinalizador. Isso causa problemas ao compilar uma biblioteca estática em uma biblioteca dinâmica.
Você obtém:
relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpic")
funcionou para mim.