我有三个文件:
lib.c lib.h => 它们应该构建为 .so 文件
client.c => 这应该构建为可执行文件。
在 client.c 中,我包含 lib.h 文件,以便获取在 lib.c 下定义的函数的声明
有人可以告诉我我应该使用的确切 CMakeLists 文件,以便源区域不会被 Cmake 的临时文件和二进制文件和库(我相信是 Windows 的情况下)在单独的构建和二进制目录中生成的杂乱无章吗?
我有三个文件:
lib.c lib.h => 它们应该构建为 .so 文件
client.c => 这应该构建为可执行文件。
在 client.c 中,我包含 lib.h 文件,以便获取在 lib.c 下定义的函数的声明
有人可以告诉我我应该使用的确切 CMakeLists 文件,以便源区域不会被 Cmake 的临时文件和二进制文件和库(我相信是 Windows 的情况下)在单独的构建和二进制目录中生成的杂乱无章吗?
此解决方案不会创建.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})
默认情况下,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})