私はこれを行うために少なくとも3つの方法に出くわしました。私はどちらが慣用的な方法であるか疑問に思っています。これは、ほぼすべての静的ライブラリに普遍的に行われる必要があります。私はCMakeのMakefileジェネレータが静的ライブラリにこれを自動的に追加しないことに驚いています。 (私が何かを逃していない限り)-fPICコンパイラオプションを追加する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
2番目の方法は、サードパーティ製のライブラリにも同様に追加することができます。完璧。 – 010110110101
Hrm - これをExternalProject_Addによって追加されたプロジェクトにどのように追加するのだろうか? – 010110110101
@ 010110110101 CMAKE_COSETION_INDEPENDENT_CODE:BOOL = true "' – Amadeus