Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Build cmake创建一个共享对象_Build_Cmake_Shared Libraries - Fatal编程技术网

Build cmake创建一个共享对象

Build cmake创建一个共享对象,build,cmake,shared-libraries,Build,Cmake,Shared Libraries,我有三个文件: lib.c lib.h=>它们应构建为.so文件 c=>这应该构建为一个可执行文件 在client.c中,我包含lib.h文件,以便获得lib.c下定义的函数的声明 有人能告诉我应该使用的确切的CmakeList文件吗?这样,源区域就可以用Cmake的临时文件以及在单独的生成目录和二进制目录中生成的二进制文件和库(.dll,如果是windows,我相信)来整理吗?Cmake默认在单独的生成目录中生成(我没有测试这个例子): 你可以: mkdir build cd build cm

我有三个文件:

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


有人能告诉我应该使用的确切的CmakeList文件吗?这样,源区域就可以用Cmake的临时文件以及在单独的生成目录和二进制目录中生成的二进制文件和库(.dll,如果是windows,我相信)来整理吗?

Cmake默认在单独的生成目录中生成(我没有测试这个例子):

你可以:

mkdir build
cd build
cmake ..
make
一切都在建设中

更新:正如@chryss在下面提到的,如果您希望生成.so文件,那么命令应该是:

ADD_LIBRARY(mylib SHARED ${mylibSRCS})

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

g++ -shared -Wl,-soname,plugin_lib.so.1 -o plugin_lib.so plugin_lib.o
这将生成一个
插件库。因此
可以在运行时使用dlopen动态加载

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

ADD_LIBRARY(mylib SHARED ${mylibSRCS})

有没有办法在不执行这些shell命令的情况下始终在新目录中进行构建?我在谷歌上搜索了一下,但找不到任何有用的链接。是的。你可以
mkdir build&cd build&cmake..&make
。如果你需要超级清理你的存储库,只需删除构建目录。这会将生成的内容与你的原始资源隔离开来rces.
添加库(mylib共享${mylibSRCS})
,如下面@chryss所述。
ADD_LIBRARY(mylib SHARED ${mylibSRCS})