2009-10-14 67 views
35

我正在尝试编写cmake规则来在linux上使用boost.python为python构建动态加载的库。我想用'foo'作为python模块的名字。所以,图书馆必须叫foo.so。 但默认情况下,cmake的使用图书馆的命名标准规则,所以如果我写动态加载库的CMake输出名称?

add_library(foo foo.cpp) 

我会得到输出libfoo.so。 即使set_target_properties(foo PROPERTIES OUTPUT_NAME "foobar") 将创建libfoobar.so

如何改变这种行为?

回答

56

你可以不设置这一行的前缀:

set_target_properties(foo PROPERTIES PREFIX "") 
1

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

我不知道你是否可以强制cmake创建foo.so而不是libfoo.so,但也许你可以使用“libfoo”作为python模块。另一种选择是创建cmake的安装目标,这将renmae libfoo.so到foo.so