python - 子项目的 CMake 覆盖策略

标签 python c++ cmake visibility

我的 CMake 项目编译了一个与大型静态库链接的 Python .so/.dylib 扩展模块。我想编译子项目的静态库,隐藏符号的可见性:它允许链接器(或 LTO 优化器)丢弃我的 python 模块未使用的符号。

最好的方法是在子项目的静态库目标上使用 CXX_VISIBILITY_PRESET 和 friend 。 但是,子项目通过声明使用 3.1.0 中的策略:

cmake_minimum_required (VERSION 3.1.0)

政策 CMP0063 新:所有目标的荣誉可见性属性 类型。 仅从 3.3 版引入,因此 set_target_properties 没有任何效果。

我的项目需要 CMake 3.3,但我无法控制子项目。

我想避免修补子项目 CMakeLists.txt,但目前我看不到其他方法。

有什么想法吗?

最佳答案

cmake_minimum_required() 对 CMake 策略有以下影响:

  • All policies introduced in the specified version or earlier will be set to use NEW behavior.
  • All policies introduced after the specified version will be unset.

但您可以使用 CMake 的 CMAKE_POLICY_DEFAULT_CMP<NNNN> 全局变量设置为“默认为 CMake Policy CMP,否则未设置。”

这是一个例子:

set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
add_subdirectory(MySubProjDir)

引用

关于python - 子项目的 CMake 覆盖策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42922905/

相关文章:

python - 为什么 random.uniform(0, float ("inf")) 总是返回 inf?

c++ - 如何处理未能释放包含在智能指针中的资源?

c++ - 在 Qt Creator 中将库链接到 CMake (MSVC)

c++ - Gcc 4.8 DWARF4 与 DWARF2

c++ - 停止相机在墙壁(或障碍物)处的移动

macos - 无法为 Mac OS X 10.8 安装 CMake

c++ - Valgrind失败不失败CTest

python - 一种类轮语法python

python - 如何为 kdeplot/displot 中的每个色调组设置不同的线型

python - Windows或Mac上没有终端的Python Bell声音