your programing

-fPIC 컴파일러 옵션을 추가하는 CMAKE의 관용적 방법은 무엇입니까?

lovepro 2020. 10. 5. 20:30
반응형

-fPIC 컴파일러 옵션을 추가하는 CMAKE의 관용적 방법은 무엇입니까?


나는 이것을하기위한 적어도 3 가지 방법을 발견했고 나는 어떤 것이 관용적 인 방법인지 궁금하다. 이것은 거의 모든 정적 라이브러리에 대해 거의 보편적으로 수행되어야합니다. CMake의 Makefile 생성기가이를 정적 라이브러리에 자동으로 추가하지 않는다는 사실에 놀랐습니다. (내가 놓친 게 아니라면?)

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

다른 변형이있을 수도 있다고 생각합니다. (찾으면 내 질문을 수정하십시오)

이 질문에 대한 답을 아는 경우 CMakeLists.txt 파일을 수정하지 않고 타사 CMake 프로젝트가이 플래그로 컴파일되도록하는 방법이 있는지도 알고 있습니까? 해당 플래그가 누락 된 정적 라이브러리를 실행했습니다. 정적 라이브러리를 동적 라이브러리로 컴파일 할 때 문제가 발생합니다.

당신은 얻을 :

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

모든 타겟에서 위치 독립적 코드 속성을 설정할 수 있습니다.

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 빌드 시스템

참고 URL : https://stackoverflow.com/questions/38296756/what-is-the-idiomatic-way-in-cmake-to-add-the-fpic-compiler-option

반응형