python c++ cmake visibility

python - CMake anula la política para el subproyecto



c++ visibility (2)

Mi proyecto CMake compila un módulo de extensión Python .so / .dylib vinculado con una gran biblioteca estática. Quiero compilar la biblioteca estática del subproyecto con visibilidad oculta para los símbolos: permitiría que el vinculador (o el optimizador de LTO) descarte los símbolos que mi módulo de python no utiliza.

La mejor forma de hacerlo sería usar CXX_VISIBILITY_PRESET y amigos en el objetivo de biblioteca estática del subproyecto. Sin embargo, las políticas de uso del subproyecto de 3.1.0 al declarar:

cmake_minimum_required (VERSION 3.1.0)

La política CMP0063 NEW: Honor visibility properties for all target types. solo se introdujo desde la versión 3.3 y, por lo tanto, set_target_properties no tiene efectos.

Mi proyecto requiere CMake 3.3, pero no tengo control sobre el subproyecto.

Me gustaría evitar parchear el subproyecto CMakeLists.txt, pero actualmente no veo otra manera.

Alguna idea ?


El cmake_minimum_required() tiene los siguientes efectos en las políticas de CMake:

  • Todas las políticas introducidas en la versión especificada o anterior se configurarán para usar un comportamiento NUEVO.
  • Todas las políticas introducidas después de la versión especificada serán desarmadas.

Pero puede usar las variables globales CMAKE_POLICY_DEFAULT_CMP<NNNN> de CMake como "predeterminadas para CMake Policy CMP cuando de lo contrario se dejan sin configurar".

Aquí hay un ejemplo:

set(CMAKE_POLICY_DEFAULT_CMP0063 NEW) add_subdirectory(MySubProjDir)

Referencia


Puede usar add_compile_option para especificar la opción de compilación adecuada.