2012-07-02 113 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

接受的答案應該更新 –