CMake动态加载库的输出名称?
我正在尝试编写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 "")