CMake 子项目的覆盖策略

2024-10-03 13:16:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

cmake_minimum_required (VERSION 3.1.0)

策略CMP0063 NEW: Honor visibility properties for all target types.仅从版本3.3引入,因此set_target_属性没有任何效果。在

我的项目需要cmake3.3,但我无法控制子项目。在

我想避免修补子项目CMakeLists.txt文件,但目前我看不到别的办法。在

有什么想法吗?在


Tags: 模块项目方法cmaketarget目标so链接
2条回答

^{}对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策略CMP处于未设置状态时,它的默认值。”

下面是一个例子:

set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
add_subdirectory(MySubProjDir)

参考

您可以使用add_compile_option来指定适当的编译器选项。在

相关问题 更多 >