14

我有三个文件:

lib.c lib.h => 它们应该构建为 .so 文件
client.c => 这应该构建为可执行文件。
在 client.c 中,我包含 lib.h 文件,以便获取在 lib.c 下定义的函数的声明

有人可以告诉我我应该使用的确切 CMakeLists 文件,以便源区域不会被 Cmake 的临时文件和二进制文件和库(我相信是 Windows 的情况下)在单独的构建和二进制目录中生成的杂乱无章吗?

4

2 回答 2

17

此解决方案不会创建.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})
于 2013-09-23T19:18:15.687 回答
12

默认情况下,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})
于 2012-07-02T12:45:19.160 回答