36

我正在尝试编写 cmake 规则以在 Linux 上使用 boost.python 为 python 构建动态加载库。我想使用 'foo' 作为 python 模块名称。因此,必须调用该库foo.so。但默认情况下,cmake 使用库命名的标准规则,所以如果我写

add_library(foo foo.cpp)

我会libfoo.so输出的。甚至set_target_properties(foo PROPERTIES OUTPUT_NAME "foobar") 会创造libfoobar.so

如何改变这种行为?

4

2 回答 2

57

您可以使用此行取消设置前缀:

set_target_properties(foo PROPERTIES PREFIX "")
于 2009-10-14T13:07:17.510 回答
1

前缀“lib”是unix/linux 的约定,并被编译器广泛利用(例如,当您链接时,您编写-lfoo)。

我不知道你是否可以强制 cmake 创建 foo.so 而不是 libfoo.so,但也许你可以将“libfoo”用于 python 模块。另一种选择是在 cmake 中创建安装目标,这会将 libfoo.so 重命名为 foo.so

于 2009-10-14T07:37:17.220 回答