Znalazłem co najmniej 3 sposoby, aby to zrobić i zastanawiam się, który jest idiomatyczny. Należy to zrobić prawie zawsze dla każdej biblioteki statycznej. Dziwię się, że generator Makefile w CMake nie dodaje tego automatycznie do bibliotek statycznych. (chyba że czegoś mi brakuje?)
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")
Uważam, że mogą istnieć również inne odmiany. (edytuj moje pytanie, jeśli je znajdziesz)
Jeśli znasz odpowiedź na to pytanie, czy wiesz również, czy istnieje sposób na spowodowanie kompilacji projektu CMake innej firmy z tą flagą bez modyfikowania jego pliku CMakeLists.txt? Natknąłem się na biblioteki statyczne, w których brakuje tej flagi. Powoduje problemy podczas kompilowania biblioteki statycznej do biblioteki dynamicznej.
Dostajesz:
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")
działało dla mnie.