cmake 共享库

Posted

技术标签:

【中文标题】cmake 共享库【英文标题】:cmake shared libraries 【发布时间】:2011-03-14 11:47:07 【问题描述】:

我正在使用 boost.python 构建应用程序。我想将每个 cpp 模块作为一个共享库。

我有一个 cpp 文件列表,如何在循环中生成名称取自 cpp 文件的不同子项目?

例如:

set(Script_srcs
    Module1.cpp
    Module2.cpp
    Module3.cpp
)

some_cycle
  add_library( NAME SHARED PATH )

谢谢。

【问题讨论】:

【参考方案1】:

您可以使用 foreach 来遍历您的源文件,并使用带有 NAME_WE 的函数 get_filename_component 来仅获取文件名,例如:

set(Script_srcs Module1.cpp Module2.cpp Module3.cpp )

foreach( f $Script_srcs )
    get_filename_component( ff $f NAME_WE )
    add_library( $ff SHARED $f )
endforeach( f )

但是,与其从文件名派生库名,为什么不反过来呢?从所需的模块名称派生文件名并在 for 循环中附加“.cpp”:

set( MyModules Module1 Module2 Module3 ) 
foreach( Mod $MyModules )
    add_library( $Mod SHARED $Mod.cpp )
endforeach( Mod )

【讨论】:

以上是关于cmake 共享库的主要内容,如果未能解决你的问题,请参考以下文章

CMake - 更改共享库链接选项

CMake:如何从子项目的所有静态库中创建一个共享库?

CMake、SWIG 和共享库

CMake第三课--安装自己编写的头文件和共享库

CMake 添加和删除宏定义以编译共享库/可执行文件

为 dlib 创建共享库