Pie*_*oid 2 c++ python visibility cmake
我的CMake项目编译了一个与大型静态库链接的Python .so / .dylib扩展模块。我想用对符号隐藏的可见性来编译子项目的静态库:它将允许链接器(或LTO优化器)丢弃我的python模块未使用的符号。
最好的方法是CXX_VISIBILITY_PRESET在子项目的静态库目标上使用和朋友。但是,子项目使用3.1.0版中的策略,方法是声明:
cmake_minimum_required (VERSION 3.1.0)
Run Code Online (Sandbox Code Playgroud)
该策略CMP0063 NEW: Honor visibility properties for all target
types.仅从版本3.3开始引入,因此set_target_properties不起作用。
我的项目需要CMake 3.3,但是我无法控制子项目。
我想避免打补丁子项目CMakeLists.txt,但目前看不到其他方法。
任何的想法 ?
在cmake_minimum_required()对CMake的政策产生以下影响:
- 在指定版本或更早版本中引入的所有策略都将设置为使用NEW行为。
- 在指定版本之后引入的所有策略都将被取消设置。
但是您可以将CMake的CMAKE_POLICY_DEFAULT_CMP<NNNN>全局变量用于“否则未设置的CMake Policy CMP的默认值”。
这是一个例子:
set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
add_subdirectory(MySubProjDir)
Run Code Online (Sandbox Code Playgroud)
参考