IT이야기

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

cyworld 2022. 6. 22. 22:14
반응형

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

나는 이것을 하기 위한 적어도 세 가지 방법을 발견했고 나는 어떤 것이 관용적인 방법인지 궁금하다.이 작업은 거의 모든 정적 라이브러리에 대해 수행해야 합니다.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")

다른 변형도 있을 수 있다고 생각합니다.(질문이 발견되면 수정해주세요)

이 질문에 대한 답을 알고 있다면 CMake Lists를 변경하지 않고 이 플래그를 사용하여 서드파티 CMake 프로젝트를 컴파일할 수 있는 방법도 알고 계십니까?txt 파일?플래그가 없는 정적 도서관을 뛰어다녔어요정적 라이브러리를 동적 라이브러리로 컴파일할 때 문제가 발생합니다.

다음과 같은 이점을 얻을 수 있습니다.

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 lib1.cpp)
set_property(TARGET lib1 PROPERTY POSITION_INDEPENDENT_CODE ON)

참조: CMAKE_POSITION_INTEND_CODE 빌드 시스템

또한 다음 명령줄 옵션을 에 전달할 수도 있습니다.cmake(고객님의 cmake 프로젝트가 아니거나 프로젝트 파일을 수정할 수 없거나 변경할 수 없는 경우):

-DCMAKE_POSITION_INDEPENDENT_CODE=ON

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

반응형