Qu'est-ce que le idiomatiques façon CMAKE pour ajouter l'option-fPIC option du compilateur?
Que j'ai rencontré au moins 3 façons de le faire et je me demande qui est le idiomatiques façon. Ce qui doit être fait presque universellement à toute bibliothèque statique. Je suis surpris que le générateur de Makefile dans CMake ne pas ajouter automatiquement ce statiques des bibliothèques. (sauf que je suis absent quelque chose?)
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")
Je crois qu'il peut aussi y avoir d'autres variantes. (s'il vous plaît modifier ma question, si vous en trouvez un)
Si vous connaissez la réponse à cette question, avez-vous aussi de savoir si il existe un moyen de provoquer une 3ème partie CMake projet à être compilé avec ce drapeau sans modifier son CMakeLists.txt fichier? J'ai couru à travers les bibliothèques statiques manque le drapeau. Il provoque des problèmes lors de la compilation d'une bibliothèque statique dans une bibliothèque dynamique.
Vous bénéficiez de:
relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
Vous devez vous connecter pour publier un commentaire.
Vous pouvez définir le code indépendant de la position de la propriété sur toutes les cibles:
ou dans une bibliothèque spécifique:
Référence: CMAKE_POSITION_INDEPENDENT_CODE système de build cmake
CMAKE_CACHE_ARGS "-DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=true"
CMAKE_POSITION_INDEPENDENT_CODE
propriété est définie par défaut pourSHARED
objectifs, il n'est pas nécessaire de définir explicitement.set
de commande (la première version ci-dessus), alors non. Si vous utilisez la deuxième version, c'est par la bibliothèque, pas par répertoire.