2012-07-02 72 views
8

我有三个文件:cmake的创建共享对象

lib.c lib.h =>他们应该建成一个.so文件
client.c =>这应该被构建为一个可执行文件。
的client.c我包括lib.h文件,以获得下lib.c定义的函数的声明里面

有人能告诉我,我应该使用,使源区的确切CMakeLists文件与Cmake的临时文件和二进制文件和库(在我相信windows的情况下的.dll)在独立的构建和二进制目录中生成的整洁?

回答

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 

一切都将是下建造。

+0

有没有办法在新目录中始终做到建立一个没有执行这些shell命令?我google搜索,但无法找到任何有用的链接。 –

+0

http://stackoverflow.com/questions/11143062/getting-cmake-to-build-out-of-source-without-wrapping-scripts/11144109#11144109 – Fraser

+0

是的。你可以'mkdir建立&cd建立&cmake ..&make'。如果您需要超级清理存储库,只需删除构建目录即可。这将生成的东西从原始来源中分离出来。 – Stewart

11

此解决方案不会创建.so文件,而是与cmake进一步包含的cmake等效文件。
我与寻找解决的办法将提供相同的:

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

这将产生可以动态使用dlopen在运行时加载的plugin_lib.so

的解决方案缺少像这样的“共享”选项:

ADD_LIBRARY(mylib SHARED ${mylibSRCS}) 
+0

接受的答案应该更新 –