Политика переопределения CMake для подпроекта

Мой проект CMake компилирует модуль расширения Python .so / .dylib, связанный с большой статической библиотекой. Я хочу скомпилировать статическую библиотеку подпроекта со скрытой видимостью для символов: это позволит компоновщику (или оптимизатору LTO) отбрасывать символы, не используемые моим модулем python.

Лучший способ сделать это – использовать CXX_VISIBILITY_PRESET и друзей в целевой статической библиотеке подпроекта. Однако в подпроекте используются политики из 3.1.0 путем объявления:

  • Декоратор экспорта, который управляет __all__
  •  cmake_minimum_required (VERSION 3.1.0) 

    Политика CMP0063 NEW: Honor visibility properties for all target types. вводится только из версии 3.3, и, следовательно, свойства set_target_properties не оказывают никакого эффекта.

    Мой проект требует CMake 3.3, но я не контролирую подпроект.

    Я хотел бы избежать исправления подпроекта CMakeLists.txt, но в настоящее время я не вижу другого способа.

    Есть идеи ?

  • Организация проекта с Cython и C ++
  • Простой, но быстрый IPC-метод для приложения Python и C ++?
  • Получить заголовок текущего активного окна / документа в Mac OS X
  • быстрый доступ к системе для Mac OS X
  • Почему мой пример python / numpy быстрее, чем чистая реализация C?
  • Создание 64-битных расширений Python C в Windows
  • 2 Solutions collect form web for “Политика переопределения CMake для подпроекта”

    cmake_minimum_required() имеет следующие эффекты для политик CMake:

    • Все политики, введенные в указанной версии или ранее, будут настроены на использование поведения NEW.
    • Все политики, введенные после указанной версии, будут отменены.

    Но вы можете использовать глобальные переменные CMake CMAKE_POLICY_DEFAULT_CMP<NNNN> для «по умолчанию для CMake Policy CMP, когда он иначе не установлен».

    Вот пример:

     set(CMAKE_POLICY_DEFAULT_CMP0063 NEW) add_subdirectory(MySubProjDir) 

    Справка

    • CMake: игнорировать предупреждения внешних модулей

    Вы можете использовать add_compile_option чтобы указать соответствующий параметр компилятора.

    Python - лучший язык программирования в мире.