cmake创建一个共享对象

时间:2012-07-02 12:19:23

标签: build cmake shared-libraries

我有三个文件:

lib.c lib.h =>它们应该构建为.so文件
client.c =>这应该构建为可执行文件。
在client.c中,我包含了lib.h文件,以获取在lib.c

下定义的函数的声明

有人可以告诉我我应该使用的确切CMakeLists文件,以便源区域与Cmake的临时文件以及在单独的构建和二进制目录中生成的二进制文件和库(在我认为是Windows的情况下为.dll)整齐?

2 个答案:

答案 0 :(得分:15)

此解决方案不会创建一个.so文件,而是一个cmake等效文件,以便进一步包含在cmake中。
我正在寻找一个解决方案,提供相当于这个:

g++ -shared -Wl,-soname,plugin_lib.so.1 -o plugin_lib.so plugin_lib.o

这将生成一个plugin_lib.so,可以在运行时使用dlopen动态加载。

解决方案缺少“共享”选项,如下所示:

ADD_LIBRARY(mylib SHARED ${mylibSRCS})

答案 1 :(得分:4)

默认情况下,Cmake构建在单独的构建目录上(我没有测试这个例子):

PROJECT(myproject)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

SET(mylibSRCS lib.c)
SET(myprogSRCS client.c)

ADD_LIBRARY(mylib ${mylibSRCS})
ADD_EXECUTABLE(myprog ${myprogSRCS})

TARGET_LINK_LIBRARIES(myprog mylib)

你这样做:

mkdir build
cd build
cmake ..
make

一切都在建设中。

更新:正如下面的@chryss所提到的,如果你想生成.so文件,命令应该是:

ADD_LIBRARY(mylib SHARED ${mylibSRCS})