Подтвердить что ты не робот

Что такое идиоматический способ в CMAKE для добавления опции -fPIC-компилятора?

У меня есть как минимум 3 способа сделать это, и мне интересно, каков идиоматический путь. Это нужно сделать почти повсеместно для любой статической библиотеки. Я удивлен, что генератор Makefile в CMake автоматически не добавляет это в статические библиотеки. (если я что-то не хватает?)

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")

Я считаю, что могут быть и другие варианты. (пожалуйста, отредактируйте мой вопрос, если найдете его)

Если вам посчастливилось узнать ответ на этот вопрос, знаете ли вы, есть ли способ скомпилировать проект третьей стороны CMake с этим флагом, не изменяя его файл CMakeLists.txt? Я столкнулся с статическими библиотеками, у которых отсутствует этот флаг. Это вызывает проблемы при компиляции статической библиотеки в динамическую библиотеку.

Вы получаете:

relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
4b9b3361

Ответ 1

Вы можете установить свойство независимого кода позиции для всех целей:

set(CMAKE_POSITION_INDEPENDENT_CODE ON)

или в определенной библиотеке:

add_library(lib1 SHARED lib1.cpp)
set_property(TARGET lib1 PROPERTY POSITION_INDEPENDENT_CODE ON)

Ссылка: CMAKE_POSITION_INDEPENDENT_CODE система сборки cmake