Mon projet CMake compile un module d'extension Python .so/.dylib lié à une grande bibliothèque statique. Je veux compiler la bibliothèque statique du sous-projet avec une visibilité cachée pour les symboles: cela permettrait à l'éditeur de liens (ou à l'optimiseur LTO) de rejeter les symboles inutilisés par mon module python. La meilleure façon d'y parvenir serait d'utiliser CXX_VISIBILITY_PRESET
et des amis sur la cible de bibliothèque statique du sous-projet. Cependant, les politiques d'utilisation des sous-projets de 3.1.0 en déclarant:Stratégie de remplacement CMake pour le sous-projet
cmake_minimum_required (VERSION 3.1.0)
La politique CMP0063 NEW: Honor visibility properties for all target types.
est introduit uniquement de la version 3.3 et donc, les set_target_properties n'a pas d'effet.
Mon projet nécessite CMake 3.3, mais je n'ai aucun contrôle sur le sous-projet.
Je voudrais éviter de patcher le sous-projet CMakeLists.txt, mais actuellement je ne vois pas d'autre moyen.
Une idée?
Au lieu d'utiliser la propriété, vous pouvez simplement ajuster les drapeaux de l'éditeur de liens [CMAKE_STATIC_LINKER_FLAGS] (https://cmake.org/cmake/help/v3.7/variable/CMAKE_STATIC_LINKER_FLAGS.html). – Tsyvarev
C'est une option de compilation. Idéalement, je définirais CXX_VISIBILITY_PRESET à "caché" globalement, puis 'set_target_properties (python_module PROPRIETES CXX_VISIBILITY_PRESET par défaut)'. En effet, il définit '-fvisibility = hidden' sur les drapeaux du compilateur pour la source déclarant les symboles privés. – Piezoid
Si vous êtes sûr que le sous-projet fonctionnerait avec la règle 'CMP0063', vous pouvez remplacer la fonction' cmake_minimum_required' pour le sous-projet, donc cela activera la politique donnée. Voir [cette réponse] (http://stackoverflow.com/a/35345933/3440745) à propos du remplacement de la fonction CMake. – Tsyvarev