CMake动态加载库的输出名称?

36 投票
2 回答
10381 浏览
提问于 2025-04-15 15:03

我正在尝试编写cmake规则,以便在Linux上使用boost.python为Python构建动态加载的库。我想把Python模块的名字定为'foo',所以这个库的名字必须叫做foo.so

但是,cmake默认使用标准的库命名规则,所以如果我写

add_library(foo foo.cpp)

我得到的输出会是libfoo.so。即使我使用set_target_properties(foo PROPERTIES OUTPUT_NAME "foobar"),也会生成libfoobar.so

我该如何改变这种行为呢?

2 个回答

1

在Unix/Linux系统中,前缀“lib”是一个约定,很多编译器都会用到这个规则(比如在链接的时候,你会写 -lfoo)。

我不太确定你是否可以强制cmake生成foo.so而不是libfoo.so,但你可以试试用“libfoo”来作为Python模块的名字。还有一个办法是在cmake中创建一个安装目标,这样可以把libfoo.so重命名为foo.so。

57

你可以用这一行代码来去掉前缀:

set_target_properties(foo PROPERTIES PREFIX "")

撰写回答